sed 从新行中删除字符

sed 从新行中删除字符

经过一些处理后,我的输入文件如下所示。

文件1.txt

12345|john|student
43321|jack|professor

78965|alex|lecturer

我需要进一步处理上面的文件,所以我也需要在行尾有一个换行符。目前,我可以如下完成。

sed 's/$/|/' file1.txt

上述命令的输出如下:

12345|john|student|
43321|jack|professor|
|
78965|alex|lecturer|

正如我们所看到的,|也被附加到空行中。当我尝试|使用以下命令再次从空白行中删除字符时,

sed 's/|//g' file1.txt

这个|角色到处都被删除了。如何只删除|空行?我还需要保留空白行。

答案1

我能够使用以下命令来完成此操作。

sed 's/^|//' file1.txt

基本上,我只检查第一个字符^,然后如果是|,我将删除它。

答案2

sed '/../!d;a\ ' file

这与下面的目的几乎相同;它会删除任何不包含 2 个或更多字符的行,并在其余所有行后附加一个空格。

这给了我一个类似于你的问题的文件:

printf '12345|john|student\n|\n|\n|\n%.0b' `seq 1 10` >|./file1.txt

它看起来像这样:

12345|john|student
|
|
|

但重复了10次。

然后这个:

sed -n '/[^|].*/s//&|\n/p' ./file1.txt

给我:

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

抱歉,我花了一点时间才把它做好;我需要停止在手机上写这些答案......

答案3

从原始内容中,您可以添加|到非空白行:

使用sed

sed -e '/^$/!s/$/|/' file

使用perl

perl -lpe 's/$/|/ if length' file

如果您想|从空白行中删除(在第二个版本中):

perl -lpe 's/\|// if length == 1'

答案4

sed

sed -i~ -re 's/^\|$//' file

搜索^管道的行首\|和行尾$//删除该字符。使用 就地编辑文件-i~ 并创建备份file~

相关内容