Bash sed不包含通过变量给出的字符串中的点

时间:2017-04-27 20:54:13

标签: bash unix sed

你好我遇到了这个问题:

以下代码不会将包含$ 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行。

1 个答案:

答案 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$