每行替换特定位置的字符
Replace characters on specific location every line
我们有一个练习,我们必须对以下文本文档做一些事情:
Rank|Mountain|Height (m)|Height (ft)|Prominence (m)|Range|Coordinates|Parent mountain|First ascent|Ascents (failed attempts)|Country
1|Mount Everest/Sagarmatha/Chomolungma|8,848|29,029|8,848|Mahalangur Himalaya|27°59'17"N 86°55'31"E|none|1953|>>145 (121)|Nepal/China
2|K2/Qogir/Godwin Austen|8,611|28,251|4,020|Baltoro Karakoram|35°52'53"N 76°30'48"E|Mount Everest|1954|45 (44)|Pakistan/China
...
40|Gangkhar Puensum|7,570|24,836|2,995|Kula Kangri Himalaya|28°02'50"N 90°27'19"E|Kangchenjunga||0 (3)|Bhutan/China
...
93|Labuche Kang III/East|7,250|23,786|570|Labuche Himalaya|28°18'05"N 86°23'02"E|Labuche Kang||0 (0)|China
...
都是用“|”分隔的数据。
对于这个练习,如果第一次登顶的年份是空的,我需要替换“||”与“|未攀登|”
我不能这样做:
%s/||/|unclimbed|/p
因为那会替换其他空白字段。
所以我的问题是,如何只替换该特定字段?
sed s 命令接受指定要替换的字段的标志。您可以将它与类似的东西一起使用:
sed '/||[^|]*|[^|]*$/s/|[^|]*/|unclimbed/8'
做你想做的事(我对这个表达式的稳健性没有任何声明,并且完全预料到它会失败的边缘情况)。
另一方面,awk 非常适合此操作,您可以执行以下操作:
awk '==""{ = "unclimbed"}1' FS=\| OFS=\| input
再次声明,这些仅用作说明性示例,我不对稳健性做出任何声明。
我们有一个练习,我们必须对以下文本文档做一些事情:
Rank|Mountain|Height (m)|Height (ft)|Prominence (m)|Range|Coordinates|Parent mountain|First ascent|Ascents (failed attempts)|Country
1|Mount Everest/Sagarmatha/Chomolungma|8,848|29,029|8,848|Mahalangur Himalaya|27°59'17"N 86°55'31"E|none|1953|>>145 (121)|Nepal/China
2|K2/Qogir/Godwin Austen|8,611|28,251|4,020|Baltoro Karakoram|35°52'53"N 76°30'48"E|Mount Everest|1954|45 (44)|Pakistan/China
...
40|Gangkhar Puensum|7,570|24,836|2,995|Kula Kangri Himalaya|28°02'50"N 90°27'19"E|Kangchenjunga||0 (3)|Bhutan/China
...
93|Labuche Kang III/East|7,250|23,786|570|Labuche Himalaya|28°18'05"N 86°23'02"E|Labuche Kang||0 (0)|China
...
都是用“|”分隔的数据。 对于这个练习,如果第一次登顶的年份是空的,我需要替换“||”与“|未攀登|”
我不能这样做:
%s/||/|unclimbed|/p
因为那会替换其他空白字段。 所以我的问题是,如何只替换该特定字段?
sed s 命令接受指定要替换的字段的标志。您可以将它与类似的东西一起使用:
sed '/||[^|]*|[^|]*$/s/|[^|]*/|unclimbed/8'
做你想做的事(我对这个表达式的稳健性没有任何声明,并且完全预料到它会失败的边缘情况)。
另一方面,awk 非常适合此操作,您可以执行以下操作:
awk '==""{ = "unclimbed"}1' FS=\| OFS=\| input
再次声明,这些仅用作说明性示例,我不对稳健性做出任何声明。