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 多行,所以最好这适用于所有行(我已经说明了)。
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)