rin*_*rer 16
如果用" \n"s 构建多行文本,这将使用一个简单的sed命令:
DATA=`echo ${DATA} | tr '\n' "\\n"`
#now, DATA="line1\nline2\nline3"
sed "s/_data_/${DATA}/" mail.tpl
Run Code Online (Sandbox Code Playgroud)
Ken*_*ent 13
AWK?
foo
bar
blah _data_and_data_
foo
_data_ foobar _data_ again
Run Code Online (Sandbox Code Playgroud)
小智 11
我试过了,sed 's/pattern/\na\nb\nc/g'但它并不适用于所有系统.什么工作是\在替换模式中添加一个换行符,如下所示:
sed 's/pattern/a\
b\
c/g'
Run Code Online (Sandbox Code Playgroud)
这会附加一行,其中包含b一个包含c模式的行.
要将它放在变量中,请使用双反斜杠:
export DATA="\\
a\\
b\\
c"
Run Code Online (Sandbox Code Playgroud)
然后:
sed "s/pattern/${DATA}/g"
Run Code Online (Sandbox Code Playgroud)
请注意双引号.
anu*_*ava 11
我建议简单地用perl命令替换sed,如下所示:
perl -i.bak -pe 's/_data_/$ENV{"DATA"}/g' mail.tpl
Run Code Online (Sandbox Code Playgroud)
戒指持有人的回答对我不起作用; 我认为tr那里的用法是错误的,而且它的编写方式,它只是通过使用来删除换行符echo.
相反,我用过sed.我使用另一个答案的代码来替换换行符(信用:Zsolt Botykai).我也期望$在我的输入中有一些美元符号(),所以我也照顾好了.您可能需要添加其他输入处理.请注意使用双引号echo来保留换行符.
DATA="$(cat whatever)"
ESCAPED_DATA="$(echo "${DATA}" | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/\$/\\$/g')"
Run Code Online (Sandbox Code Playgroud)
然后你可以使用${ESCAPED_DATA}在sed:
cat input | sed 's/one liner/'"${ESCAPED_DATA}"'/' > output
Run Code Online (Sandbox Code Playgroud)
只是想我会分享.
将变量回显到临时文本文件中。
将文本文件插入到 mail.tpl 并从 mail.tpl 中删除数据
echo ${DATA} > temp.txt
sed -i -e "/_data_/r temp.txt" -e "//d" mail.tpl
Run Code Online (Sandbox Code Playgroud)
小智 5
\用 a (除了最后一个)转义所有换行符对我有用。最后一个换行符不得被转义,以免破坏s命令。
例子 :
DATA="a
b
c"
ESCAPED=$(echo "${DATA}" | sed '$!s@$@\\@g')
echo "${ESCAPED}"
a\
b\
c
sed "s/pattern/${ESCAPED}/" file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30555 次 |
| 最近记录: |