经过一些处理后,我的输入文件如下所示。
文件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~
。