我在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
。