[英]Replace Line with Matching Pattern
我有一个包含两行对联的文件,一个 header 行,以//
开头并以|
包围的行号结束 , 后跟一行长度可变的文本。 下面是一个示例,其中...
表示文件以连续的行号连续多行。
// * * - - - * |1|
textextextextextextextext
// *- *-* * |2|
textextextextextextextexttextextextext
...
// * - * -* |41232|
textextextextextextext
我想找到行号,然后用>linenumber
替换 header 行。 这个示例文件是:
>1
textextextextextextextext
>2
textextextextextextextexttextextextext
...
>41232
textextextextextextext
我知道这可能涉及/s
和sed
或awk
与反向引用,但我似乎无法让它工作。
sed单线:
sed 's%^//.*|\([0-9]*\)|$%>\1%' file
是的,sed 是一个很好的工具:
sed -E '\%^//.*\|[[:digit:]]+\|% s/.*\|([[:digit:]]+)\|/>\1/'
解释:
\%^//.*\|[[:digit:]]+\|%
这是一个地址,即后面s///
命令只会在匹配的行上运行。 它在一行的开头匹配//
,在后面的某个地方,竖线之间必须有一个数字。使用任何 awk:
$ awk -F'|' 'NF>1{$0=">" $2} 1' file
>1
textextextextextextextext
>2
textextextextextextextexttextextextext
...
>41232
textextextextextextext
以上假定text
从不包含|
秒。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.