Linux Shell编程-用另一个单词替换特定单词

Linux Shell编程-用另一个单词替换特定单词,linux,shell,awk,sed,Linux,Shell,Awk,Sed,我是shell编程的初学者,我想用shell替换文本的第三个单词,每行第一个单词。单词之间用“:”分隔。你能帮助我吗?Thx很多。让我们从这个测试文件开始: $ cat file one:two:three:four:five up:and:down 1:2:3:4 使用awk 将“文本的第三个单词替换为每行的第一个单词”: 工作原理: -F:告诉awk在输入时使用:作为字段分隔符 $3=$1告诉awk用第一个单词替换第三个单词 1是awk对打印行的神秘速记 OFS=:告诉awk使用:作为输

我是shell编程的初学者,我想用shell替换文本的第三个单词,每行第一个单词。单词之间用“:”分隔。你能帮助我吗?Thx很多。

让我们从这个测试文件开始:

$ cat file
one:two:three:four:five
up:and:down
1:2:3:4
使用awk 将“文本的第三个单词替换为每行的第一个单词”:

工作原理:

  • -F:
    告诉awk在输入时使用
    作为字段分隔符

  • $3=$1
    告诉awk用第一个单词替换第三个单词

  • 1
    是awk对打印行的神秘速记

  • OFS=:
    告诉awk使用
    作为输出的字段分隔符

使用外壳
添加一个例子来说明这一点:如果有文本:“你是最好的”,我希望我的shell编程返回“你是最好的”不,我只是个古玩:)@TeodoraCiont OK。我添加了一个
sed
解决方案。
$ awk -F: '{$3=$1} 1' OFS=: file
one:two:one:four:five
up:and:up
1:2:1:4
$ while IFS=: read a b c d ; do echo "$a:$b:$a:$d"; done <file
one:two:one:four:five
up:and:up:
1:2:1:4
$ sed -E 's/([^:]*):([^:]*):[^:]*/\1:\2:\1/' file
one:two:one:four:five
up:and:up
1:2:1:4