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

使用awk和sed替换文件的最后第三行,sed,awk,Sed,Awk,我需要找到文件的最后第三行,如果是“}”,我应该用“}”替换它 我想到的是awk和sed 这将查找文件的最后第三行 PATTERN=$(awk '{v[c++]=$0}END{print v[c-3]}' $file) 我想用 sed -i 's/$PATTERN/}/' $file 但这是错误的 不知道如何继续这个awk应该会这样做(最后第三行更多已清理) awk'{v[++c]=$0}END{for(i=1;i这个awk应该可以(最后第三行more被清理) awk'{v[++c]

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

我想到的是awksed 这将查找文件的最后第三行

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

 sed -i 's/$PATTERN/}/' $file
但这是错误的
不知道如何继续

这个
awk
应该会这样做(最后第三行
更多
已清理)


awk'{v[++c]=$0}END{for(i=1;i这个
awk
应该可以(最后第三行
more
被清理)

awk'{v[++c]=$0}END{for(i=1;i)
我需要找到文件的最后第三行,如果是“}”,我应该
将其替换为“}”

使用
tac
sed

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

在MacOS上,您可以说:

sed '1!G;h;$!d' filename | sed '3s/^};$/}/' | sed '1!G;h;$!d'
我需要找到文件的最后第三行,如果是“}”,我应该 将其替换为“}”

使用
tac
sed

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

在MacOS上,您可以说:

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

@JotnBut files remaines unchanged要更改原始文件,请执行以下操作:
awk(某些命令)file>tmp&&mv tmp file
这将写回对
文件的更改
有些事情是错误的,您可能会在示例中看到,文件的第一行丢失了!很好的捕获。我刚刚复制了原始文件,它在使用增量变量后有
c++
,因此数组将从
0
开始,更改为
++c
PS,唯一使用单个命令的解决方案,
awk
:)@JotnBut files remaines未更改要更改原始文件,请执行:
awk(某些命令)file>tmp&&mv tmp file
这将写回对
文件的更改
有些事情是错误的,您可能会在示例中看到,文件的第一行丢失了!很好的捕获。我刚刚复制了原始文件,它在使用增量变量后有
c++
,因此数组将从
0
开始,更改为
++c
PS,唯一使用单个命令的解决方案,
awk
:)我在mac上运行,bash抱怨找不到tac命令我在mac上运行,bash抱怨找不到tac命令