Sed删除角色的第一个和第二个实例之间的所有内容?

时间:2013-08-29 21:03:34

标签: string bash replace sed

我对sed不太熟悉,但如果我有这样的字符串:

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

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

理想的输出是:

asdf | something else | nothing | qwerty

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

由于

3 个答案:

答案 0 :(得分:2)

s/|[^|]*|/|/应该完成这项工作

echo 'asdf | this is something | something else | nothing | qwerty' | 
sed 's/|[^|]*|/|/'
asdf | something else | nothing | qwerty

答案 1 :(得分:2)

也可以使用awk完成:

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

使用纯BASH:

echo "${str%%|*}|${str#*|*|}"
asdf | something else | nothing | qwerty

答案 2 :(得分:1)

检查一下:

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

使用您的示例

kent$ sed 's/|[^|]*//' <<<"asdf | this is something | something else | nothing | qwerty"                                                                      
asdf | something else | nothing | qwerty