好吧,找个快速的方法来做这个。我有一个需要在文本文件中更改的行号列表。该行上的16位模式可以是任何东西,但我需要更改它,使其仅基于行号来读取XXXXXXXXXXXXXXXX。同样,我有一长串行号,我知道需要修改。需要改变的线条没有明显的模式。(我没有编写数据模式,但我知道需要更改哪些行来读取所有X。)我在这里读了很多答案,但没有一个能真正解决这个问题。
如果不清楚,我换个说法.
更改文件中的26115、32198、37256、40001、40023行以读取XXXXXXXXXXXXXXX。我有超过10万行需要在190万行文件中修改。
发布于 2017-05-07 23:51:53
sed或awk都能很好地完成这项任务。
sed '
26115 s/.*/XXXXXXXXXXXXXXX/
32198 s/.*/XXXXXXXXXXXXXXX/
37256 s/.*/XXXXXXXXXXXXXXX/
40001 s/.*/XXXXXXXXXXXXXXX/
40023 s/.*/XXXXXXXXXXXXXXX/
'awk '
NR==26115 || NR==32198 || NR==37256 || NR==40001 || NR==40023 {$0 = "XXXXXXXXXXXXXXX"}
1
'(在前面的代码执行可能的转换之后,孤独的1会打印所有的行。)
发布于 2017-05-08 06:35:16
sed -e '1{x;s/^/XXXXXXXXXXXXXXX/;x;}
26115bp
32198bp
37256bp
40001bp
40023bp
d
:p
g
' data_file我们首先使用所需的模式XXXXXXXXX填充保持空间,然后通过跳到标签:p来回忆,只有对于所需的行号:p将检索持有空间,然后隐式地将其转入stdout。不匹配的行将被删除(如果希望保留这些行,请将d更改为b )。
https://unix.stackexchange.com/questions/363595
复制相似问题