grep 到 $URL 然后 sed $URL

grep 到 $URL 然后 sed $URL

我在1.txt中有:

https://www.google.se/
https://www.bing.com/
URL=$(grep ".*" ./1.txt) | sed "s/$/\">${URL}/" ./1.txt > ./2.txt

我进入2.txt:

https://www.google.se/">
https://www.bing.com/">

我想要在2.txt中:

https://www.google.se/">https://www.google.se/
https://www.bing.com/">https://www.bing.com/

答案1

似乎没有任何理由将数据存储在变量中。

awk -v OFS='">' '{ print $0, $0 }' 1.txt >2.txt

这将执行您似乎想要执行的操作,即">在每行末尾插入两个字符,然后是该行的原始内容。在此代码中,这是通过将行输出为新字段来完成的。输出字段分隔符OFS会自动插入到它们之间。的值在命令行上OFS设置为。">

或者,使用sed

sed 's/\(.*\)/\1">\1/' 1.txt >2.txt

这使用捕获组来捕获整行。然后将其替换为捕获的位、字符串">和再次捕获的位。

正如评论中指出的,一个更短的变体是

sed 's/.*/&">&/' 1.txt >2.txt

&出现在s命令的替换部分时,将被替换为与表达式匹配的输入位。表达式为.*,因此&将是完整的行,并且会在中间&">&插入该行两次。">


您的管道,

URL=$(grep ".*" ./1.txt) | sed "s/$/\">${URL}/" ./1.txt > ./2.txt

没有什么意义,因为它的左侧和右侧是彼此独立执行的(并且它们之间没有通信)。表达式中的值$URL将为空sed

如果你曾经使用过

URL=$(grep ".*" ./1.txt); sed "s/$/\">${URL}/" ./1.txt >./2.txt

这与以下相同

URL=$(<./1.txt); sed "s/$/\">${URL}/" ./1.txt >./2.txt

该命令会尝试在每行末尾sed插入$URL变量的完整内容(整个)。1.txt它也会失败,因为该值包含几个/会干扰命令/分隔符的字符s

相关内容