KSH:sed命令用于搜索和替换文件中最后一次出现的字符串

Sri*_*vas 0 ksh sed hp-ux

我试图使用sed在文件中搜索最后一次出现.在HP-UX中,tac选项不可用.

对于Ex:以下是文件中的数据,

A|2121212|666666666 | 2|01|2 |B|1111111111 |234234234 |00001148|
B|2014242|8888888888| 3|12|3 |B|22222222222 |45345345 |00001150|
C|4545456|4444444444| 4|31|4 |B|3333333333333 |4234234 |00001148|
Run Code Online (Sandbox Code Playgroud)

我尝试着:

cat $filename | sed 's/00001148/00001147/g'
Run Code Online (Sandbox Code Playgroud)

对于00001148的出现,它从00001148变为00001147.

我必须搜索|00001148|最后一次出现并替换为另一个号码.目前我的sed命令正在更改00001148的两个实例.

nu1*_*73R 5

编辑

要匹配最后一行,请使用 $

sed '$s/00001148/00001147/g' $filename 
Run Code Online (Sandbox Code Playgroud)

将输出作为

A|2121212|666666666 | 2|01|2 |B|1111111111 |234234234 |00001148|
B|2014242|8888888888| 3|12|3 |B|22222222222 |45345345 |00001150|
C|4545456|4444444444| 4|31|4 |B|3333333333333 |4234234 |00001147|
Run Code Online (Sandbox Code Playgroud)

如果匹配行是文件中的最后一行,请使用tail而不是cat

tail -1 $filename | sed 's/00001148/00001147/g'
Run Code Online (Sandbox Code Playgroud)

tail命令从文件中选择最后(尾部)行,此处指定采用1行usint -1选项

如果它不是最后一行,

   grep "00001148" $filename | tail -1 | sed 's/00001148/00001147/g'
Run Code Online (Sandbox Code Playgroud)

grep命令查找所有出现的事件并tail选择最后一行并sed进行替换.