使用sed执行替换时丢失制表符和换行符

时间:2016-02-18 20:14:22

标签: linux bash replace sed

我需要从shell命令中替换-Xmx1024m中的1024(将2048更改为standalone.conf)。

我尝试使用sed

执行此操作
echo $(sed 's/1024/2048/g' standalone.conf) > standalone.conf.

代码有效,但保存的文本丢失了标签和换行符。

3 个答案:

答案 0 :(得分:5)

将扩展转换为echo不带引号的主题,将其转换为字符串拆分和全局扩展,将这些进程生成的每个单词作为单独的参数传递给echoecho然后结合每个之间的单个空间。

改为考虑:

sed 's/1024/2048/g' <standalone.conf >standalone.conf.new && mv standalone.conf{.new,}

...而且,通常情况下,始终使用echo "$foo"或代替echo $foo - 这里缺少引号,这些引用最直接导致您的错误。

答案 1 :(得分:1)

不要使用echo,但让sed更改文件:

sed -i 's/1024/2048/g' standalone.conf

答案 2 :(得分:1)

sed 's/1024/2048/g'将在整个文件中全局转换1024到2048,这可能是不明智的。以某种方式限制翻译会好得多。如果您的目标实际上是您所说的目标,即将-Xmx1024m更改为-Xmx2048m,则以下内容至少是一个合理的开始(假设您的sed支持-i选项):

sed -i -e 's/-Xmx1024m/-Xmx2048m/' standalone.conf

(如果您的sed不支持-i,则进行明显的更改。)

如果文件的时间戳有用,并且如果您只想更新文件,则需要考虑:

grep -q -e -Xmx1024m standalone.conf && sed -i -e 's/-Xmx1024m/-Xmx2048m/' standalone.conf