我想删除文件中每行的第五个单词。
文件的当前内容:
File is not updated or and will be removed
System will shut down f within 10 seconds
Please save your work 55 or copy to other location
Kindly cooperate with us D
预期输出:
File is not updated and will be removed
System will shut down within 10 seconds
Please save your work or copy to other location
Kindly cooperate with us
答案1
怎么样cut
:
$ cut -d' ' -f1-4,6- file.txt
File is not updated and will be removed
System will shut down within 10 seconds
Please save your work or copy to other location
Kindly cooperate with us
-d' '
将分隔符设置为空格-f1-4,6-
选择第一个到第四个字段(字),保留第五个字段,然后继续从第六个字段到其余字段打印。
答案2
解决方案cut
:
cut -d ' ' -f1-4 -f6- FILE
答案3
awk:删除第五个字段
awk '{for (i=5; i<NF; i++) $i = $(i+1); NF--};1' file
如果您想就地保存文件:https://stackoverflow.com/q/16529716/7552
您可以只删除第 5 个字段的内容,但这会留下 2 个连续的输出字段分隔符:
awk '{$5 = ""};1' file
答案4
格伦提供了一个相当于的解决方案
awk '{$5="";打印}'文件
正如他和其他人所指出的,这
- 去除每一行的前导和尾随空白,
- 将每个空白字符串(空格和/或制表符)压缩为单个空格,并且
- 第四个和第六个单词之间留有两个空格。
解决第三个问题的技巧是
awk '{$5="";打印}'文件| sed 's // /'
这仍然会在包含五个或更少单词的任何行的末尾留下一个或多个添加的空格。如果您可以识别出一个永远不会出现在输入中的单词,
awk '{$5="独角兽";打印}'文件| sed 's/ *独角兽//'
即使这样(但仍然留下问题 1 和 2)。