用sed去除配置文件空行和注释 去掉注释 #

sed去除注释行:sed -i -c -e '/^#/d' config_file 
sed去除空行: sed -i -c -e '/^$/d' config_file 
sed去空行和注释行:sed -i -c -e '/^$/d;/^#/d' config_file

[root@rac1 ~]# cat a
a
b
adss
afdsf 
af  #


o
#asd

##
asdf # adfas fad af # a ds
[root@rac1 ~]# sed -i -c -e '/^$/d;/^#/d' a
[root@rac1 ~]# cat a
a
b
adss
afdsf 
af  #
o
asdf # adfas fad af # a ds

2.使用命令及方法
1. 使用 `sed` 命令
`sed` 是一个流编辑器,可以用来对文本进行过滤和转换。对于大多数配置文件,注释通常以 `#` 开头。你可以使用以下命令去除所有以 `#` 开头的行:

sed -i '/^#/d' filename.conf
#这里,`-i` 选项表示直接修改文件,`/^#/d` 是一个正则表达式,表示删除所有以 `#` 开头的行。

d =delete


2. 使用 `awk` 命令
`awk` 是一个强大的文本处理工具,可以对文件进行复杂的文本操作。以下命令将删除所有包含 `#` 的行:

awk '!/#/' filename.conf > filename_no_comments.conf
这个命令将不包含 `#` 的所有行输出到一个新文件 `filename_no_comments.conf`。如果你想直接在原文件上进行更改,可以使用 `gawk`(GNU awk)的 `--in-place` 选项:

gawk '!/#/' filename.conf --in-place
 3. 使用 `grep` 命令
`grep` 命令用于搜索文本,并且可以用来删除包含特定模式的行。以下命令将删除所有包含 `#` 的行:

grep -v '^#' filename.conf > filename_no_comments.conf
 
同样,这个命令将输出到一个新文件中。如果你想直接修改原文件,可以使用 `sed` 命令,如上所述。

注意事项
- 在使用上述命令之前,请确保你有文件的备份,以防不小心覆盖或损坏重要数据。
- 某些配置文件可能包含以 `#` 开头的行,但这些行实际上是有效的配置项(例如,某些 `.bashrc` 或 `.bash_profile` 文件)。在使用这些命令时,请确保你了解文件的结构,以免意外删除重要配置。
- 如果你的配置文件使用了其他注释符号(如 `;` 对于 INI 文件),你需要根据实际情况调整正则表达式。

以上命令假设注释符号是 `#`。如果你的配置文件使用了不同的注释符号,只需将正则表达式中的 `#` 替换为相应的注释符号即可。 

------------------------只是去掉注释--------

 
[root@rac1 ~]# cat a
asdf # adfas fad af # a ds
o
#/dev/sdb1
[root@rac1 ~]#  sed -i '/^#\/dev\/sdb1/ s/^#//' a
[root@rac1 ~]# cat a
asdf # adfas fad af # a ds
o
/dev/sdb1

---两个##注释,还有特殊符号
[root@rac1 ~]#  sed -i '/^\/dev\/sdb1/ s/^/##/'  a
[root@rac1 ~]# cat a
asdf # adfas fad af # a ds
o
##/dev/sdb1
[root@rac1 ~]# sed -i '/^#\/dev\/sdb1/ s/^#//' a---失败
[root@rac1 ~]# cat a
o
##/dev/sdb1
[root@rac1 ~]# sed -i '/^##\/dev\/sdb1/ s/^##//' a
[root@rac1 ~]# cat a
asdf # adfas fad af # a ds
o
/dev/sdb1
[root@rac1 ~]#

----------------------------进阶

使用sed命令在文件中删除以特定标记开始的注释行内容

 

sed -ri "s:^([ ]*)[$comment_mark]+[ ]?([ ]*$regex):\\1\\2:" "$file"
这是一个使用 `sed` 的命令,用于在文件中进行正则表达式的替换。我们逐步解析这个命令:

1. **`sed`**:这是一个流编辑器,用于对输入流(或文件)进行基于文本模式的操作。
2. **`-r`**:这个选项是告诉 `sed` 使用扩展正则表达式(ERE)。在ERE中,某些字符(如 `+`、`?`、`|`、`{}` 等)可以直接使用,而不需要转义。
3. **`-i`**:这个选项告诉 `sed` 直接修改文件内容,而不是输出到标准输出。
4. **`"s:^([ ]*)[$comment_mark]+[ ]?([ ]*$regex):\\1\\2:"`**:这是 `sed` 的替换命令,格式是 `s/PATTERN/REPLACEMENT/`。这里使用的是 `:` 作为分隔符,而不是常见的 `/`。


   * **`^([ ]*)`**:匹配行的开始,并捕获0个或多个空格。
   * **`[$comment_mark]+`**:匹配一个或多个 `$comment_mark` 字符。注意 `$comment_mark` 是一个变量,代表某个特定的字符或字符集。
   * **`[ ]?`**:可选地匹配一个空格。
   * **`([ ]*$regex)`**:捕获0个或多个空格,然后捕获 `$regex` 所代表的正则表达式。同样,`$regex` 也是一个变量。
   * **`\\1\\2`**:在替换部分,`\1` 和 `\2` 分别代表上面提到的第一个和第二个捕获组。这意味着替换后的行将保留原始的前导空格和由 `$regex` 捕获的部分,但删除 `$comment_mark` 和其后的可选空格。
5. **`"$file"`**:这是 `sed` 命令要处理的文件的名称。这里 `$file` 是一个变量,代表实际的文件名。

**举例**:

假设 `$comment_mark` 是 `#`,`$regex` 是 `.*`(匹配任何字符0次或多次),并且我们有一个名为 `example.txt` 的文件,内容如下:

sed -ri "s:^([ ]*)[$comment_mark]+[ ]?([ ]*$regex):\\1\\2:" "$file"

在txt文本中 ---用$comment_mark 替换成#

sed -ri "s:^([ ]*)[#]+[ ]?([ ]*.*):\\1\\2:"  example.txt


# This is a comment
Another line # with comment
Yet another line
执行这个 `sed` 命令后,`example.txt` 的内容将变为:

[root@rac1 ~]# sed -ri "s:^([ ]*)[#]+[ ]?([ ]*.*):\\1\\2:" example.txt??不知道哪里错了
sed: -e expression #1, char 32: unknown option to `s
[root@rac1 ~]# sed -ri "s:^([ ]*)[#]+[ ]?([ ]*.*):\\1\\2:" example.txt---可以


[root@rac1 ~]# cat example.txt
# This is a comment
Another line # with comment
Yet another line
[root@rac1 ~]# sed -ri "s:^([ ]*)[#]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]# cat example.txt
This is a comment
Another line # with comment
Yet another line
[root@rac1 ~]# vi example.txt
[root@rac1 ~]# cat example.txt
#This is a comment
Another line # with comment
Yet another line
#    second comment
[root@rac1 ~]# sed -ri "s:^([ ]*)[#]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]# cat example.txt
This is a comment
Another line # with comment
Yet another line
   second comment
[root@rac1 ~]# 

-----删除空格开头

[root@rac1 ~]# sed -ri "s:^([ ]*)[ ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]# cat example.txt
This is a comment
Another line # with comment
Yet another line
  second comment
[root@rac1 ~]# sed -ri "s:^([ ]*)[ ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]# cat example.txt
This is a comment
Another line # with comment
Yet another line
 second comment
[root@rac1 ~]# sed -ri "s:^([ ]*)[ ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]# cat example.txt
This is a comment
Another line # with comment
Yet another line
second comment
[root@rac1 ~]# 

----[            ] 空格再多没有意义

[root@rac1 ~]# cat example.txt
This is a comment
Another line # with comment
i                       Yet another line
         second comment
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]# cat example.txt
This is a comment
Another line # with comment
i                       Yet another line
  second comment
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]#  sed -ri "s:^([ ]*)[            ]+[ ]?([ ]*.*):\\1\\2:" example.txt
[root@rac1 ~]# cat example.txt
This is a comment
Another line # with comment
i                       Yet another line
second comment
[root@rac1 ~]# 


 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】07.循环队列

一、循环队列的定义 定义:队列主要有顺序队列,循环队列,双端队列,优先队列。而当中循环队列是一种线性数据结构。它也被称为“环形缓冲器”。它只允许在一端进行插入操作,即队尾(rear)&#xf…

【对顶堆 优先队列】295. 数据流的中位数

本文涉及知识点 对顶堆 优先队列 LeetCode295. 数据流的中位数 中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。 例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 …

CVE-2019-12272 Openwrt可视页面LuCi命令注入漏洞复现(完结)

声明 本文所使用的一些源代码等内容已经上传至github,具体地址如下 Vulnerability_POC-EXP/OpenWrt/CVE-2019-12272 at main a2148001284/Vulnerability_POC-EXP GitHub 漏洞简介 参考内容: CVE-2019-12272 OpenWrt图形化管理界面LuCI命令注入分析 |…

有哪些有效的策略可以提升独立站的外链数量?

有哪些有效的策略可以提升独立站的外链数量?提升独立站的外链数量并不难,难得是不被谷歌惩罚把你的网站判定为作弊,正因如此,了解并应用GNB自然外链策略是个不错的开始,GNB外链的核心价值在于它提高了网站外链资源的自…

如何学习和提升SQL

资料来源于腾讯技术直播,只作为学习记录,如有侵权,请联系作者进行删除

分享6个自己每天都会打开的网站

分享6个自己每天都会打开的网站,有实用办公网站,也有休闲摸鱼网站,链接直达,速看~ 1、鸠摩搜索 https://www2.jiumodiary.com/ 一个免费的电子书下载网站,页面干净无广告,只有一个搜索框,输入…

应用了网络变压器的PC网卡连接转换器后不好连网,有掉线现象,但外接路由器无问题,可能是什么原因?

Hqst盈盛(华强盛)电子导读:今天分享的是应用了网络变压器的PC网卡连接转换器后不好连网,有掉线现象,但外接路由器无问题,可能是什么原因呢?如何解决呢? 首先,我们要了解传…

Kotlin/Android中执行网络请求

方式一:使用okhttp3 okhttp官网 okhttp3 github地址 打开build.gradle.kts文件加入依赖 dependencies {implementation("com.squareup.okhttp3:okhttp:4.9.0") }在IDEA的Gradle面板点击reload按钮便会自动下载jar 使用网络请求时需要把网络的权限打开&a…

Nuxt3 的生命周期和钩子函数(十一)

title: Nuxt3 的生命周期和钩子函数(十一) date: 2024/7/5 updated: 2024/7/5 author: cmdragon excerpt: 摘要:本文详细介绍了Nuxt3中几个关键的生命周期钩子和它们的使用方法,包括webpack:done用于Webpack编译完成后执行操作…

pytorch-时间序列

目录 1. 时间序列2. word embedding2.1 one hot2.2 word2vec2.3 GloVe 1. 时间序列 具有时间相关性的序列叫做时间序列,比如:语音、文本句子 2. word embedding 2.1 one hot 针对句子来说,可以用[seq_len, vector_len] 有多少个单词vecto…

2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024)

2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024) 会议简介 2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024)是一次重要的学术盛会,将在中国厦门举行。会议的主要目的是为全球的电子通信和计算机科学技术领域的专家、…

数字信号处理实验二(模拟信号采样与重构及频谱分析FFT)

模拟信号采样与重构及频谱分析FFT(2学时) 要求: 对一模拟信号进行采样;对该采样信号进行重构;分析它们的频谱特征。目的: 熟悉MATLAB命令和编辑、运行、调试环境;掌握采样定理及对信号的频谱分析…

简过网:考教师编制报培训班有用吗?

​ 很多想要备考教师编的朋友都会有一个疑问,那就是备考教师编报培训班有用吗? 其实,主要还是要看你是笔试和面试。 小编觉得如果是笔试的话,其实都是教育理论的东西,线下班其实没有太大的必要,第一是面授…

DFS之搜索顺序——AcWing 1116. 马走日

DFS之搜索顺序 定义 DFS之搜索顺序是指在执行深度优先搜索时,遍历图或树中节点的策略。具体而言,DFS会沿着一条路径深入到底,当无法继续深入时回溯,然后选择另一条未探索的路径继续深入。搜索顺序直接影响到搜索效率和剪枝的可能…

发现CPU占用过高,该如何排查解决?

1.使用top命令 查看cpu占用最多的进程 2.使用 top -H -p pid 发现有两个线程占用比较大 3.将线程id转换为16进制 使用命令 printf 0x%x\n pid 4.使用 jstack pid | grep 线程id(16进制) -A 20 (显示20行) 根据代码显示进行错误排查

电脑为什么会提示丢失msvcp140.dll?怎么修复msvcp140.dll文件会靠谱点

电脑为什么会提示丢失msvcp140.dll?其实只要你的msvcp140.dll文件一损坏,然而你的电脑程序需要运用到这个msvcp140.dll文件的时候,就回提示你丢失了msvcp140.dll文件!因为没有这个文件,你的很多程序都用不了的。今天我…

无人机对地面运动目标定位---获取目标的移动方向和速度

目录 一、引子 我们利用单目无人机通过等时间间隔拍照的形式对地面某移动目标进行定位,当前,我们已经获得了每张相片上该目标的三维坐标,并且知道该无人机在飞行过程中拍照的时间间隔,那么我们就可以通过一定的计算,得…

溶酶体靶向嵌合体制备方法和技术

网盘 https://pan.baidu.com/s/1dhCCryatp71j7yXTDdrrTw?pwdynr4 具有聚集诱导发光性质的比率型溶酶体pH探针及应用.pdf 内体-溶酶体转运靶向嵌合体降解剂及其制备方法与应用.pdf 可降解PDGFR-β的蛋白降解靶向嵌合体及其制备方法和应用.pdf 溶酶体膜包覆纳米颗粒的制备方法.…

剪画小程序:自媒体工具推荐:视频文案提取!

各位小伙伴,你们好啊! 上周五观看《歌手 2024》第八期时,我再次被何炅老师幽默风趣的主持风格所折服。他的每一句话都仿佛带着魔力,让现场气氛热烈非凡,实在令人羡慕不已! 何炅老师的口才之所以如此出色&a…

如何在 Ubuntu上搭建 LAMP

远程登录 Ubuntu系统环境 ssh (User)(IP) # 比如:ssh lennlouis192.168.207.128 为安全起见,建议你使用 root 登录 VPS 后创建一个具有 sudo 权限的帐号。 安装和配置 Apache 2 Apache Http Server 是一个开源的,非常流行,使用…