【发布时间】:2016-09-01 18:13:06
【问题描述】:
我有一个多行字符串,从网上下载的:
toast the lemonade
blend with the lemonade
add one tablespoon of the lemonade
grill the spring onions
add the lemonade
add the raisins to the saucepan
rinse the horseradish sauce
我已将此分配给$INPUT,如下所示:
INPUT=$(lynx --dump 'http://example.net/recipes' \
| python -m json.tool \
| awk '/steps/,/]/' \
| egrep -v "steps|]" \
| sed 's/[",]\|^ *//g; $d')
此时,$INPUT 已准备好替换到我的目标文件中,如下所示:
sed -i "0,/OLDINPUT/s//$INPUT/" /home/test_file
当然,sed 抱怨一个未终止的s 命令——这就是问题所在。
我正在使用的当前解决方法是在将其提供给 sed 之前将 echo $INPUT 发送给 echo $INPUT,但随后不会保留换行符。 echo 去除换行符 - 这就是问题所在。
正确的输出应该保持它的换行符。如何指示 sed 保留换行符?
【问题讨论】:
-
unterminated 's'几乎总是意味着您的“数据”中有一个“/”字符。只需使用不同的字符来分隔s@string@repl@[g]。 Posixsed期望\@string@repl@。注意前导反斜杠字符。祝你好运。 -
@shelter 这将如何工作?
sed -i "0,/OLDINPUT/s//$INPUT/" /home/test_file喜欢吗?sed -i "0,@OLDINPUT/s@/$INPUT@" /home/test_file -
我相信你需要
\@matchInput@s@string@repl@当然你的$INPUT不能有任何@字符。如果是这样,请使用~或不在$INPUT中的其他内容。因此,您将使用/的任何地方现在都需要成为您的新分隔符。祝你好运。 -
在重读您的问题后,请澄清一下,您的目标是通过
sed插入多行文本($INPUT)吗?这需要使用sed的i(插入)或a(追加)命令。在尝试使用变量之前,您应该在更简单的环境中使用它。 (不推荐!)对不起,但是/祝你好运! -
@shelter,输入是逐行的,这就是我尝试使用 sed 替换替换/插入的内容。问题是它仅在我使用 echo 将输入更改为一行而不是逐行时才有效 - 这是 sed 工作的唯一方式...
标签: sed