假设我的txt文件包含如下字符:
abcd|123|kds|Name|Place|Phone
ldkdsd|323|jkds|Name1|Place1|Phone1
我想删除|前三次出现的每一行中的所有字符每一行中的字符。我希望我的输出为:
Name|Place|Phone
Name1|Place1|Phone1
有人能帮我解决这个问题吗?我如何使用sed实现这一目标?
答案 0 :(得分:4)
这将是cut
cut -d'|' -f4- file
输出:
Name|Place|Phone
Name1|Place1|Phone1
-f4-
意味着你想从第四场到最后。如果您有不同的要求,请调整4
。
答案 1 :(得分:1)
你可以试试下面的sed commad,
$ sed -r 's/^(\s*)[^|]*\|[^|]*\|[^|]*\|/\1/g' file
Name|Place|Phone
Name1|Place1|Phone1
^(\s*)
捕获所有开头的空格。[^|]*\|[^|]*\|[^|]*\|
匹配第三个|
。因此,此abcd|123|kds|
将匹配。答案 2 :(得分:1)
这可能适合你(GNU sed):
sed 's/^\([^|]*|\)\{3\}//' file
或更可读:
sed -r 's/^([^|]*\|){3}//' file
答案 3 :(得分:0)
sed 's/\(\([^|]*|\)\{3\}\)//' YourFile
这是一个posix版本,在GNU sed force --posix
上由于使用|
被解释为“OR”而不是posix版本。
<强>释强>
替换[任何charcater,但\{3\}
后面的|
(|
)]的第一次出现(\([^|]*|\)
)为空(//
一个空模式)
答案 4 :(得分:0)
您可以打印最后3个字段:
awk '{print $(NF-2),$(NF-1),$NF}' FS=\| OFS=\| file
Name|Place|Phone
Name1|Place1|Phone1