Regex 使用正则表达式工具将字符串附加到另一个字符串
就我的一生而言,我不知道如何做这个非常简单的程序。我想:Regex 使用正则表达式工具将字符串附加到另一个字符串,regex,perl,unix,sed,awk,Regex,Perl,Unix,Sed,Awk,就我的一生而言,我不知道如何做这个非常简单的程序。我想: 读取一个文件,该文件每行只包含一个数字 在文件中的数字前后追加字符 例如,在文件的内容中: 1 2 三, 将变成: file1.txt file2.txt file3.txt 我试过这个: sed 's/[0-9]+/{file&.txt}/' file_name.txt 但什么也没发生。我在网上看到说使用{0}或{/1}的片段,但我很难找到解释这意味着什么 其最终目标是让xargs将此文本中的所有文件名复制到另一个目录。我相信
2
三, 将变成: file1.txt
file2.txt
file3.txt 我试过这个:
sed 's/[0-9]+/{file&.txt}/' file_name.txt
但什么也没发生。我在网上看到说使用{0}或{/1}的片段,但我很难找到解释这意味着什么
其最终目标是让
xargs
将此文本中的所有文件名复制到另一个目录。我相信,如果没有我在这里使用的文本文件,可能还有另一种方法可以实现这一点。如果有人对这个最终目标有一个更简单的答案,那将很高兴听到,尽管我也想知道如何使用sed!谢谢。在sed
中,+
不是特殊字符,字面意思是+
字符。您需要使用反斜杠将其转义:
sed 's/[0-9]\+/file&.txt/' file_name.txt
或者,您可以使用-r
选项,该选项添加了几个特殊字符(包括+
):
是的,这确实有效:
$cat file
1
2
3
$sed 's/.*/File&.txt/' file
File1.txt
File2.txt
File3.txt
$cat文件
1.
2.
3.
$sed's/*/File和.txt/'文件
File1.txt
File2.txt
File3.txt
不确定您为什么需要
sed
来实现最终目标(或者xargs
)。您可以简单地执行以下操作:
while read -r name; do
cp "File${name}.txt" /path/to/copy
done < file_name.txt
读取时-r名称;做
cp“File${name}.txt”/path/to/copy
完成
GNU sed中的-r
开关只添加了“语法糖”,因为它消除了在元字符()+?|
之前添加反斜杠的需要;我选择了这个答案,因为它更直接地回答了这个问题。
while read -r name; do
cp "File${name}.txt" /path/to/copy
done < file_name.txt