And*_*rew 4 sed text-processing
我是sed新手。我想sed用来删除文本文件中的注释行。
在我的一系列文本文件中,注释行以符号或符号开头(即,它们是最初用于在 中绘图的文件)。假设我有以下示例文件(称为):#@xmgracesample.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)