And*_*rew 4 sed text-processing
我是sed
新手。我想sed
用来删除文本文件中的注释行。
在我的一系列文本文件中,注释行以符号或符号开头(即,它们是最初用于在 中绘图的文件)。假设我有以下示例文件(称为):#
@
xmgrace
sample.txt
Run Code Online (Sandbox Code Playgroud)# Comment 1 # Another comment # Yet another comment @ More comments @ Still more comments data1 data2 data3
我想使用到位sed
修改sample.txt
,以获得以下内容:
Run Code Online (Sandbox Code Playgroud)data1 data2 data3
哪里有“之间的空白行data2
”和“data3
中的两个版本” sample.txt
。
受这个 Stack Overflow 问题的启发,我想出了这一系列(连续)命令:
sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt
Run Code Online (Sandbox Code Playgroud)
这给出了这个结果文件:
Run Code Online (Sandbox Code Playgroud)<blank line> <blank line> <blank line> <blank line> <blank line> data1 data2 data3
where<blank line>
只是一个空行。(我必须这样写,这样 Stack Exchange 才能正确格式化输出。)
上面的问题是注释行仅替换为空行,而不是完全删除。
(连续)命令的另一种可能性是:
sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt
sed -i '/^$/d' sample.txt
Run Code Online (Sandbox Code Playgroud)
我从中获得以下输出:
Run Code Online (Sandbox Code Playgroud)data1 data2 data3
然而,上述也是错误的,因为“ data2
”和“ data3
”之间的空行没有被保留(我错误地删除了所有空行,不加区别地)。如何删除注释行?
我正在运行 Ubuntu Linux。谢谢你的时间!
iru*_*var 10
使用sed delete 命令(这里假设sed
在 Ubuntu 和其他 GNU 系统上找到 GNU)。
sed -i '/^[@#]/ d' sample.txt
Run Code Online (Sandbox Code Playgroud)
如果您需要考虑前导空格字符:
sed -i '/^\s*[@#]/ d' sample.txt
Run Code Online (Sandbox Code Playgroud)