如何更改文本中特定行的单词?

时间:2019-04-07 12:40:34

标签: bash

我正在更改文本中特定行的最后一个单词。 这个词可以在其他行中重复。

我可以为此使用什么命令?

# file libros.bd 
while IFS = read line
   do
     word=$(echo $line|rev|cut -f1 -d' '|rev) #Last word in each line
done <"$file"

这是我的输入文件:

  

18654“ JuanFrances” autor1 1964 1 no

     

18655“卢卡斯·特塞罗” autor2 1987 2 si

     

18656“费南多·皇帝” autor3 1845 5否

     

18657“胡安·费尔南多” autor3 1965 1 si

这将是最终状态

  

18654“ JuanFrances” autor1 1964 1 no

     

18655“卢卡斯·特塞罗” autor2 1987 2 si

     

18656“费南多·皇帝” autor3 1845 5否

     

18657“胡安·费尔南多” autor3 1965 1

这将是一种方式

  

sed”“ $ line”'s / no / si /'libros.bd> temp && mv temp libros.bd

1 个答案:

答案 0 :(得分:1)

要获取最后的消息,您可以使用grep

grep -Eo '[^ ]+$'

所以在您的情况下:

word=$(echo $line| grep -Eo '[^ ]+$')

grep搜索模式,-E--extended-regexp或更高级的正则表达式数学。 -o输出匹配的行,不给它们上色。

正则表达式部分: [^ ]匹配空格 +匹配先前一次或多次 $与行尾匹配

这是根据您输入的输出:

no
si
no
si
state
no
si
no
no