用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.mfbz.cn/a/774683.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

兴业小课堂|什么是法拍房助拍机构?如何挑选靠谱的助拍机构?

随着法拍房市场的不断发展和扩大 使法拍房数量的增加 其交易的复杂性和专业性需求也日益凸显 这促使了专门机构的出现来满足市场需求 法拍房助拍机构存在的原因主要有以下几点: 1.专业知识和经验: 法拍房的交易流程相对复杂,涉及到法律法…

对标 GPT-4o 的开源实时语音多模态模型:Moshi

是由法国的 AI 实验室 Kyutai 推出的实时语音多模态模型,支持听、说、看,最关键的是你现在就可以在浏览器中使用,如果这个链接延迟高,可以试试这个, 无需输入邮箱,点击 Join queue 即可。 简单体验了下,比…

Perplexity: 推出 ProSearch 的新版本

Perplexity 更新了 ProSearch 功能,支持多步推理、高级数学和编程能力,比起快速搜索,提供了更深入、全面的搜索,以及详尽报告和分析。 白嫖用户每 4 个小时可免费使用 5 次,Pro 用户几乎无限制。

ChatGPT:SpringBoot解决跨域问题方法-手动设置请求头

ChatGPT:SpringBoot解决跨域问题方法-手动设置请求头 这里的设置响应头是为了发送请求方还是接收请求方 设置响应头是为了发送请求方。具体来说,添加 Access-Control-Allow-Origin 头部是为了告诉浏览器,哪些域名可以访问资源。当设置为 * 时…

二百四十二、Hive——Hive的动态分区表出现day=__HIVE_DEFAULT_PARTITION__分区

一、目的 Hive的DWD层动态分区表的分区出现day__HIVE_DEFAULT_PARTITION__,有点懵,而且表中数据的day字段也显示__HIVE_DEFAULT_PARTITION__ 1、DWD层动态分区表的分区 __HIVE_DEFAULT_PARTITION__ 2、DWD层分区字段day数据 __HIVE_DEFAULT_PARTITION…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构① | 4.1-4.2

前言 第4章对应的内容选择题和案例分析都会进行考查,这一章节属于技术相关的内容,学习要以教材为准。本章分值预计在4-5分。 目录 4.1 架构基础 4.1.1 指导思想 4.1.2 设计原则 4.1.3 建设目标 4.1.4 总体框架 4.2 系统架构 4.2.1 架构定义 4.…

通义灵码入选 2024 世界人工智能大会最高荣誉「镇馆之宝」

7 月 4 日,2024 上海世界人工智能大会正式开幕,并揭晓了今年的「镇馆之宝」名单,通义灵码入选,是首个入围该名单的 AI 编程助手。 镇馆之宝是世界人工智能大会展览的最高荣誉,从科技含量、市场前景、创新性以及社会经济…

pip install包出现哈希错误解决

如图,当遇到此类错误时,多半是连接不稳定导致的校验失败。我们可以在PC端,或Ubuntu通过浏览器下载.whl安装文件:直接复制报错信息中的网址到浏览器即可弹出下载窗口。

Vue3重构案例(使用vue3的语法重构element的button组件)

这篇文章紧接的上一篇文章,上篇文章是对给element的button组件写了一个单元测试,这篇文章是使用vue3的语法进行重构,这里说一下单元测试和重构的联系,当你给组件写了单元测试之后,重构会减少你很多的debug时间&#xf…

Transformer和Mamba强强结合!最新混合架构全面开源,推理速度狂飙8倍

最近发现,将Mamba和Transformer模块混合使用,效果会比单独使用好很多,这是因为该方法结合了Mamba的长序列处理能力和Transformer的建模能力,可以显著提升计算效率和模型性能。 典型案例如大名鼎鼎的Jamba:Jamba利用Tr…

【Unity小知识】UnityEngine.UI程序集丢失的问题

问题表现 先来说一下问题的表现,今天在开发的时候工程突然出现了报错,编辑器提示UnityEngine.UI缺少程序集引用。 问题分析与解决(一) 既然是程序集缺失,我们首先查看一下工程项目是否引用了程序集。在项目引用中查找一…

自定义流程表单开发优势体现在什么地方?

提质、增效、降本,应该是很多职场办公需要实现的发展目标。那么,应用什么样的软件平台可以实现?低代码技术平台、自定义流程表单开发是目前流行于职场行业中的软件产品,可视化操作界面、够灵活、易维护等优势特点明显,…

java项目总结4

1.正则表达式 用于验证字符串是否满足自己所需要的规则。方法:matches 注意:\在Java中有特殊涵义,是将其它的意思本来化,假设"是用来引用字符串的,但是你如果想要输出它,那是不是就变成了System.out…

气压传感器在自动驾驶汽车还有哪些应用场景

气压传感器在近年来被广泛应用于各种新兴领域,以下是其中几个最新的应用: 1、自动驾驶汽车:自动驾驶汽车需要精确的气压传感器来监测道路上的气压变化,帮助车辆进行准确的定位和导航。气压传感器可以提供高精度、可靠的气压数据&…

利用git将Qt代码托管到U盘或者网盘

文章目录 1.前言2.解决方案3.操作步骤3.1.软件安装3.2.在U盘创建裸仓库3.3.创建Qt程序并将代码上传至U盘3.4.版本标记及切换3.4.在别的电脑上clone代码出来 4.其他5.结语 1.前言 我们在开发项目时,随着项目需求的增加以及bug的修复,肯定会涉及到版本管理…

【山东大学】web数据管理——复习笔记

写在前面 若有图片加载失败,请科学上网 。本文为对软件学院连老师的PPT课件总结所得的复习笔记,仅供参考。不保证对考点的全覆盖,以PPT为主。对往年考过的题相关知识点前面都标注了“考过”,并高亮,供参考。写的比较匆…

智能插座搭配BIOS唤醒功能实现远程定时开关机

智能插座 智能插座凭借其强大的联网能力,不仅能够实现远程操控开关电源,部分高端型号更是集成了电量统计与自动化操作功能,为用户带来了前所未有的便捷体验。以下是我对几款体验过的智能插座的简要评价,因版本差异可能有所不同。…

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

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

Playwright之录制脚本转Page Object类

Playwright之录制脚本转Page Object类 设计思路 : 我们今天UI自动化设计的时候,通常会遵循一些设计模式,例如Page Object模式。但是自己找元素再去填写有一些麻烦,所以我们可以通过拆解录制的脚本,将其中的元素提取出来…

vue3中pinia使用持久化管理

安装插件 npm install pinia pinia-plugin-persistpinia进行注册 创建index.ts import { createPinia } from pinia; //对外暴露大仓库 export default createPinia(); 在mian.ts //引入pinpa import { createApp } from vue //引入根组件 import App from ./App.vue const…