2

我对 sed 不是很有经验,但是如果我有这样的字符串:

asdf | this is something | something else | nothing | qwerty

我可以删除第一个和第二个实例之间的所有内容|,以及其中一个吗?

理想的输出是:

asdf | something else | nothing | qwerty

我试过sed 's/|*|//2'了,但这只会删除第二个管道。

谢谢

4

3 回答 3

2

s/|[^|]*|/|/应该做的工作

echo 'asdf | this is something | something else | nothing | qwerty' | 
sed 's/|[^|]*|/|/'
asdf | something else | nothing | qwerty
于 2013-08-29T21:10:10.503 回答
2

也可以使用 awk 完成:

awk -F '|' -v OFS='|' '{sub($2 " *\\|", "")}1' <<< "$str"
asdf | something else | nothing | qwerty

使用纯 BASH:

echo "${str%%|*}|${str#*|*|}"
asdf | something else | nothing | qwerty
于 2013-08-29T21:16:20.877 回答
1

检查这个:

sed 's/|[^|]*//'

以你的例子

kent$ sed 's/|[^|]*//' <<<"asdf | this is something | something else | nothing | qwerty"                                                                      
asdf | something else | nothing | qwerty
于 2013-08-29T21:12:06.437 回答