Sed 将每行中的第一个单词替换为第三个单词,但单词之间用“分隔”:&引用;

Sed 将每行中的第一个单词替换为第三个单词,但单词之间用“分隔”:&引用;,sed,Sed,我正在努力学习sed,但是当我试图用第三个单词替换第一个单词时,我被卡住了。我在考虑上面的代码,但它不起作用。 此外,如果单词之间用“:”分隔,是否有任何方法拆分行 sed "s/\(^[a-z,0-9]*\) \(.*\) \([a-z,0-9]*\)/\1 \2 \1/" 从你下面的评论来看,听起来好像你真的想用第一个词替换第三个词,而不是相反。如果是,则: $ echo 'first:second:third' | sed 's/\(\([^:]*\).*:\).*/\1\2/' fir

我正在努力学习sed,但是当我试图用第三个单词替换第一个单词时,我被卡住了。我在考虑上面的代码,但它不起作用。 此外,如果单词之间用“:”分隔,是否有任何方法拆分行

sed "s/\(^[a-z,0-9]*\) \(.*\) \([a-z,0-9]*\)/\1 \2 \1/"

从你下面的评论来看,听起来好像你真的想用第一个词替换第三个词,而不是相反。如果是,则:

$ echo 'first:second:third' | sed 's/\(\([^:]*\).*:\).*/\1\2/'
first:second:first
或者,如果要操作多个字段:

$ echo 'first:second:third' | sed 's/\([^:]*\):\([^:]*\):\([^:]*\)/\1:\2:\1/'
first:second:first
但无论如何,您都应该使用awk处理涉及字段的任何内容:

$ echo 'first:second:third' | awk 'BEGIN{FS=OFS=":"} {$3=$1} 1'
first:second:first

sed“s/^\([^]*\)\([^]*\)[^]*/\1\2\1/”
但是使用
awk更“简单”
谢谢@WiktorStribiżew,这很有帮助!我添加了分隔符,就是这样。这就是我想要的,只有1:\2:\1:。非常感谢你!你说得对。我在考虑用第一个词替换第三个词,然后写了相反的词。再次感谢!我真的很喜欢@ed morton的回答,它既聪明又简洁。我希望对sed命令增加一点可读性增强<代码>echo'第一:第二:第三:第五'| sed-r's |([^:]+):([^:]+):([^:]*)|\1:\2:\1 |'cool@DudiBoy,使用管道的好主意。你能解释一下([^:][+)指的是什么吗?我知道,^是行不通的,但是:?此外,我还尝试使用[a-z,0-9],因此我只查找字母和数字的单词,而不查找字符,但它不起作用。()是一个匹配组,稍后将在\1\2\3中引用。[]是字符选择组,在[]中,^将取消匹配。因此[^:]匹配所有字符,而不是:。+是一个或多个的乘法选择器。*是零或更多的乘法选择器。[^::]正在选择所有非:字符,一次或多次。