我需要从shell命令中替换-Xmx1024m
中的1024
(将2048
更改为standalone.conf
)。
我尝试使用sed
:
echo $(sed 's/1024/2048/g' standalone.conf) > standalone.conf.
代码有效,但保存的文本丢失了标签和换行符。
答案 0 :(得分:5)
将扩展转换为echo
不带引号的主题,将其转换为字符串拆分和全局扩展,将这些进程生成的每个单词作为单独的参数传递给echo
(echo
然后结合每个之间的单个空间。
改为考虑:
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