你好我遇到了这个问题:
以下代码不会将包含$ variable1的行替换为$ variable2的内容:
variable1=$(cat pathtofile1 | grep -w "something.more")
variable2=$(cat pathtofile2 | grep -w "something.else")
sed -i 's/$variable1/$variable2/g' pathtofile1
我想将整行从一个文件复制到另一个文件,但它不起作用,我认为它必须对变量内容中的点做些什么,但我似乎不是无论如何都要修复它。
有人可以帮忙吗?
提前致谢。
编辑:编辑这个问题,因为我不想清楚自己想做什么。我想将file1中包含引用文本的行替换为包含第二个引用文本的file2行。
答案 0 :(得分:1)
首先,您需要使用双引号而不是简单的引号来对变量进行解释。然后,您需要将变量中的点转义为点字符,而不是解释为任何字符的正则表达式解释。
你也没有正确设置变量。
yoones@laptop:/tmp/toto$ cat f1
toto #aabbcc
titi #fff000
tata #212322
yoones@laptop:/tmp/toto$ cat f2
hello #ababab
good #123456
morning #fafafa
yoones@laptop:/tmp/toto$ cat x.sh
#!/bin/bash
variable1=$(cat f1 | fgrep '#fff00' | sed -e 's/[]\/$*.^|[]/\\&/g')
variable2=$(cat f2 | fgrep '#fafafa' | sed -e 's/[]\/$*.^|[]/\\&/g')
sed -i "s/$variable1/$variable2/g" f1
yoones@laptop:/tmp/toto$ ./x.sh
yoones@laptop:/tmp/toto$ cat f1
toto #aabbcc
morning #fafafa
tata #212322
yoones@laptop:/tmp/toto$ cat f2
hello #ababab
good #123456
morning #fafafa
yoones@laptop:/tmp/toto$