我有一个包含链接的文件。这些链接被注释掉了。我想使用sed或awk搜索特定的字符串,然后删除以下十行的第一个字符。
据我所知,我可以用以下方式搜索sed
sed -n '/StringToSearchFor/p' file
使用awk我会写下面的
awk '/pattern/ {print $1}'
但我怎么能删除以下十行的第一个字符?
sed和awk的手册页是一个巨大的。所以请不要指着他们旁边你有一个搜索字符串。
提前致谢。
答案 0 :(得分:0)
Perl救援:
perl -pe 's/^.// if $l > 0 && $l--; $l = 10 if /StringToSearchFor/'
$l
保留删除第一个字符的行数。每次遇到搜索模式时都会设置为10。$l > 0
)中的第一个字符,则会将其删除并减少行数($l--
)。s/^.//
只删除第一个字符。使用substr $_, 0, 1, q()
可能会更快。答案 1 :(得分:0)
你可以使用这个awk:
awk -v s='StringToSearchFor' '$0 ~ s{n=NR} NR<=n+10{$0 = substr($0, 2)} 1' file
答案 2 :(得分:0)
试试这个。
awk '/pattern/ { p=11 }
p && p-- <= 10 { print substr($0, 2); next }
1'
当我们看到模式时,我们设置p
。当设置p
但是更小时,即在后面的十行上,我们打印一个子串;否则,1
是打印所有其他行的简写。 next
导致Awk与下一个输入行一起开始。
答案 3 :(得分:0)
下面有一个沉重的sed
版本。它打印匹配模式的行和后面的10行没有它们的第一个char,并退出:
sed -n '/StringToSearchFor/{p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;q}' java0.log
/StringToSearchFor/{ ... }
:定义当前行与正则表达式匹配时要执行的命令块。
sed
命令是字母:
p
:打印当前行(模式空间)n
与sed -n
:清空模式空间并在下一行中读取s/^.\(.*\)$/\1/p
:打印除第一个之外的所有字符。q
:退出使用10次n;s/^.\(.*\)$/\1/p
:打印10行而不使用第一个字符。
答案 4 :(得分:0)
另一个awk
awk 'p&&p--{sub(/^./,"")} /pattern/{p=10} 1' file
删除模式后面的10行的第一个字符。