使用sed删除文本文件中的注释行

And*_*rew 4 sed text-processing

我是sed新手。我想sed用来删除文本文件中的注释行。

在我的一系列文本文件中,注释行以符号或符号开头(即,它们是最初用于在 中绘图的文件)。假设我有以下示例文件(称为):#@xmgracesample.txt

# Comment 1
# Another comment
# Yet another comment
@ More comments
@ Still more comments
data1
data2

data3
Run Code Online (Sandbox Code Playgroud)

我想使用到位sed修改sample.txt,以获得以下内容:

data1
data2

data3
Run Code Online (Sandbox Code Playgroud)

哪里有“之间的空白行data2”和“data3中的两个版本” sample.txt

这个 Stack Overflow 问题的启发,我想出了这一系列(连续)命令:

sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt
Run Code Online (Sandbox Code Playgroud)

这给出了这个结果文件:

    <blank line>
    <blank line>
    <blank line>
    <blank line>
    <blank line>
data1
data2

data3
Run Code Online (Sandbox Code Playgroud)

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)

我从中获得以下输出:

data1
data2
data3
Run Code Online (Sandbox Code Playgroud)

然而,上述也是错误的,因为“ 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)