0

我有一种情况需要替换文件中特定类型的字符串。

场景是:

像这样的用户输入:

abc = 21
xyz=32;34;35

用户可以在 xyz 中输入许多数字,但格式应为“;” 分隔值现在我需要替换特定文件中的这些值假设 test.txt

该文件的格式如下:test.txt

cond0=abc
cond1=xyz
Cond2=abcxyz%

因此输出应该是这样的

cond0=21
cond1=32;34;35
cond2=2132%;2134%;2135%

我正在使用以下命令来执行此操作,但由此我无法在 cond2 中获得正确的输出

sed "s/abc/${abc}/g" "$TEST_DIR/$file" > "$TEST_DIR/$file.bak" && mv "$TEST_DIR/$file.bak" "$TEST_DIR/$file"

sed "s/xyz/${xyz}/g" "$TEST_DIR/$file" > "$TEST_DIR/$file.bak" && mv "$TEST_DIR/$file.bak" "$TEST_DIR/$file"

任何人都可以看看这个吗?

4

2 回答 2

1

为什么你不能通过所有的条件?

sed "s/abc/$abc/g" <$TEST_DIR/$file | sed "s/xyz/$xyz/g" >$TEST_DIR/newfile
mv $TEST_DIR/newfile $TEST_DIR/$file

请注意,您必须进行这两个操作,即写入临时文件然后重命名。否则你最终会清除文件。

输入 "<" 和输出 ">" 重定向由 shell 处理,当他们看到 ">somefile" 时,"somefile" 被截断。所以你永远做不到cat <file >file成功。

于 2012-06-06T04:59:37.387 回答
0

使用 bash,

abc=21
xyz='32;34;35'
abcxyz=$(sed -r "s/^|;/\0${abc}/g;s/;|$/%\0/g" <<< "${xyz}")
sed -i~ "s/abcxyz%/${abcxyz}/;s/abc/${abc}/;s/xyz/${xyz}/" inputFile
于 2012-06-06T05:39:31.800 回答