使用awk和sed替换文件的最后第三行

时间:2013-11-06 09:16:56

标签: sed awk

我需要找到文件的最后第三行,如果是“},”我应该用“}”替换它

我在考虑 awk sed 这将找到文件的最后第三行

 PATTERN=$(awk '{v[c++]=$0}END{print v[c-3]}' $file)

我想用

 sed -i 's/$PATTERN/}/' $file

但这是错误的 不知道如何继续

2 个答案:

答案 0 :(得分:4)

  

我需要找到文件的最后第三行,如果是“},”我应该   将其替换为“}”

使用tacsed

tac filename | sed '3s/^};$/}/' | tac

在MacOS上,您可以说:

sed '1!G;h;$!d' filename | sed '3s/^};$/}/' | sed '1!G;h;$!d'

答案 1 :(得分:0)

这个awk应该这样做(最后三行more已清除)

cat file
one
two },
three
four
more }, test }, hi
five },
yes

awk '{v[++c]=$0}END {for (i=1;i<=NR;i++) {if (v[c-3]~"},") gsub(/},/,"}",v[c-3]);print v[i]}}' t
one
two },
three
four
more }, test }, hi
five },
yes