![修剪文本而不循环](https://linux22.com/image/91783/%E4%BF%AE%E5%89%AA%E6%96%87%E6%9C%AC%E8%80%8C%E4%B8%8D%E5%BE%AA%E7%8E%AF.png)
输入(以变量 $VAR 形式):
'yoo' : x'yoo' 'welcome' : x'welcome' 'we' : x'we' 'dum' : x'dum' 'test' : x'test' 'poo' : x'poo' 'D2-dog' : x'D2-dog' 'ant' : x'ant' 'rat' : x'rat' 'xmass' : x'xmass'
我想要输出为:
yoo welcome we dum test poo D2-dog ant rat xmass
我不希望输出为:
yoo
welcome
we
dum
test
poo
D2-dog
ant
rat
xmass
我尝试过, echo $VAR | sed "s/' : x'//g"
但它很混乱,而且不是我所期望的。
我们可以使用cut
ortr
或 吗sed
?
在亚历克斯回答后编辑:我对不同的文本有问题:
echo "'yoo' : x'yoo' 'welcome' : x'welcome' 'we' : x'we' 'test' : x'test' 'poo' : x'poo' 'dog' : x'dog' 'ant' : x'ant' 'rat' : x'rat' 'xmass' : x'xmass' 'exp' : x'exp' 'S-123': x'S-123' 'demo': x'demo' 'neu': x'neu'" | sed -e "s/'\([^']*\)' : x'\1'/\1/g"
我得到的输出为
yoo welcome we test poo dog ant rat xmass exp 'S-123': x'S-123' 'demo': x'demo' 'neu': x'neu'
奇怪,无法找出问题所在!
答案1
sed -e "s/'\([^']*\)' \?: x'\1'/\1/g"
像这样运行:
$ MYVAR="'yoo' : x'yoo' 'welcome' : x'welcome' 'we' : x'we' 'dum' : x'dum' 'test' : x'test' 'poo' : x'poo' 'D2-dog' : x'D2-dog' 'ant' : x'ant' 'rat' : x'rat' 'xmass' : x'xmass'"
$ echo "$MYVAR" | sed -e "s/'\([^']*\)' \?: x'\1'/\1/g"
yoo welcome we dum test poo D2-dog ant rat xmass
这是可行的,因为\X
反向引用也可以作为扩展搜索模式的一部分出现。
编辑:更改了 RexExp 以使冒号之前的空格可选