我有一个文件,每一行都具有以下格式:
foo tc_TESTNAME, // TEST #1
我希望在每一行中复制
tc_TESTNAME
,具体如下:foo tc_TESTNAME tc_TESTNAME, // TEST #1
以下sed命令只会复制单词匹配部分:
# sed -e "s/(tc_*)/& &/"
foo tc_ tc_TESTNAME, // TEST #1
什么是正确的正则表达式语法来复制整个单词?
sed -e "s/(tc_*)/& &/"
这将只复制后面带0个或多个下划线的tc
。但是你想要匹配的是以tc_
开头,直到下一个逗号或空格的任何内容。
考虑到这一点,下面的sed应该适合您:
s='foo tc_TESTNAME, // TEST #1'
sed 's/tc_[^[:blank:],]*/& &/g' <<< "$s"
foo tc_TESTNAME tc_TESTNAME, // TEST #1
[^[:blank:],]*
匹配0或多个非空白字符且非逗号的任意字符。
请注意,对于此sed命令,无需使用扩展正则表达式模式。
sed
程序。sed -E 's/(tc_[^,]+)/\1 \1/' Input_file
或者:为了匹配以tc
开头的确切单词,只需在正则表达式中确保有空格,以防您可能有其他字符串。
sed -E 's/ (tc_[^,]+)/ \1 \1/' Input_file
说明:使用-E
选项启用ERE(扩展正则表达式),在主程序中使用s
选项执行替换。然后匹配(tc_[^,]+)
,捕获从tc_开始到下一个逗号之前的内容,并将此值捕获到第1个捕获组中。在进行替换时,按照所需的输出格式将其替换为自身空格和自身。