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将此文本中的所有文件名复制到另一个目录。我相信

就我的一生而言,我不知道如何做这个非常简单的程序。我想:

  • 读取一个文件,该文件每行只包含一个数字
  • 在文件中的数字前后追加字符
  • 例如,在文件的内容中:

    1
    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