如何用 sed 删除一行而不留下空行?

如何用 sed 删除一行而不留下空行?

文件.txt:

line: this-is-some-text
line2: this-is-some-other-text

例子:

sed 's#line:.*##g' File.txt

line2: this-is-some-other-text

正如您所看到的,第一行已被删除,但留下了一个空行。

你能执行sed这样它就不会在删除时留下空行吗?

答案1

您可以使用delete 命令而不是substitute 命令:

$ cat File.txt 
line: this-is-some-text
line2: this-is-some-other-text

$ sed '/line:/d' File.txt
line2: this-is-some-other-text

您可能需要考虑将表达式锚定到行的开头,如sed '/^line:/d' File.txt

或者,考虑 grep 反向匹配:grep -v '^line:' File.txt

答案2

使用 awk:

$ awk '/line:/{next}1'
$ awk '/^line:/{next}1' #For pattern at the start of line

使用编辑:

$ printf '%s\n' 'v/line:/p'  | ed -s file
$ printf '%s\n' 'v/^line:/p'  | ed -s file # For pattern at the start of line

相关内容