如何将字符串仅添加到数字文本行

Lis*_*iso 4 command-line sed awk text-processing

假设我有 6 行文本。

Series
Of
Word
73914
Again
Word
Run Code Online (Sandbox Code Playgroud)

我需要在包含数字的行的开头添加一个字符串。说我插入number-

Series
Of
Word
number-73914
Again
Word
Run Code Online (Sandbox Code Playgroud)

目前我运行两个命令来达到预期的结果。我想知道是否有更有效的方法。

注意:有 1000 多行,所以最好这适用于所有行(我已经说明了)。

Ser*_*nyy 9

sed 可以这样做:

$ sed 's/^[[:digit:]]*$/number-&/' input.txt
Series
Of
Word
number-73914
Again
Word
Run Code Online (Sandbox Code Playgroud)

如果我们想考虑空行,我们将使用+-r选项:

$ sed -r 's/^[[:digit:]]+$/number-&/' input.txt
Series
Of
Word
number-73914
Again
Word
line below is empty

line above is empty
Run Code Online (Sandbox Code Playgroud)

确认一切正常后,您可以使用-i选项来编辑文件本身,即sed -i .... 否则,您始终可以使用以下命令制作文件的副本 sed 's/^[[:digit:]]*$/number-&/' input.txt > output.txt

请注意,这假定文件格式一致,每行没有前导空格或尾随空格。

这是额外的 Python:

$ python3 -c 'import sys; print("\n".join([ "number-" + i.strip() if i.strip().isnumeric() else i.strip() for i in sys.stdin]))' < input.txt
Series
Of
Word
number-73914
Again
Word
line below is empty

line above is empty
Run Code Online (Sandbox Code Playgroud)

  • 我经常使用“substitute if match”变体来处理这样的事情`/^[[:digit:]]+$/ s/^/number-/'` (2认同)