我在一个文件中有一个字段,其中包含" \ n"在价值之间。我想删除它们。我该怎么办?
例如,我的第4个字段可能包含一个或多个\ n。我想摆脱所有这些。
a|b|c|d\nD\n\n|e
a1|b1|c1|d1\n\nd2\n|e1
答案 0 :(得分:1)
将此作为您的测试文件:
$ cat file
a|b|c|d\nD\n\n|e
a1|b1|c1|d1\n\nd2\n|e1
\n
可以删除如下:
$ sed 's|\\n||g' file
a|b|c|dD|e
a1|b1|c1|d1d2|e1
或者,要更改文件:
sed -i.bak 's|\\n||g' file
这使用单个替换命令。替换命令的格式为s|old|new|
。在我们的例子中,old
是\n
,除了sed将\
解释为转义字符。所以,我们必须加倍才能获得字面斜杠。替换文本new
部分不算什么。在sed中,命令s|\\n||
将替换找不到的第一个\n
。由于您要替换所有此类事件,我们在替换命令的末尾添加g
:这告诉sed全局进行更改。
从第四个字段和第四个字段替换反斜杠-n:
$ awk -F\| '{gsub(/\\n/, "", $4); print}' OFS=\| file
a|b|c|dD|e
a1|b1|c1|d1d2|e1
要就地更改文件:
gawk -i inplace -F\| '{gsub(/\\n/, "", $4); print}' OFS=\| file
工作原理:
-F\|
这告诉awk使用|
作为输入的字段分隔符。
gsub(/\\n/, "", $4)
这告诉awk在字段4中的任何地方都不用反斜杠替换。
print
这告诉awk打印该行。
OFS=\|
这告诉awk使用|
作为输出的字段分隔符。