sed的变量替换
我已经试过这无数的方法,时间认输,并要求主...sed的变量替换
#!/bin/bash
# Read in the VERSION.header file, this is a plain text file
# with returns, which in some of my tests, I am loosing the returns and getting
# one string wrapped only by the shell width
VERSION_HEADER=`cat VERSION.header`
sed 's/_VERSION_HEADER_/"$VERSION_HEADER"/g' DOCUMENTATION
字符串“_VERSION_HEADER_”作为文件文档线1当前存在。文件'VERSION.header'有大约18行。
我不会使用sed。我所要做的就是读取一个作为模板的文件,将该文件数据存储为变量,读入第二个文件,将其存储为变量。在第二个文件中查找标记,用第一个文件中的数据替换标记。
例子:
$猫VERSION.header
hi, this is my header file, how are you today
good, that is nice, great
have a nice day, k, thx, bye.
$猫文档
_VERSION_HEADER_
# This is a documentation file, please read it
# If you do not read it, you will get stuck to the toilet.
而且结果应该是:
嗨,这是我的头文件,你今天好吗
不错,那很好,很棒
祝你有美好的一天,k,thx,再见。
#这是一个文档文件,请阅读它
#如果你没有阅读它,你会被卡在厕所里。
sed -i "s/_VERSION_HEADER_/$VERSION_HEADER/g" DOCUMENTATION
编辑
对不起,终于得到了你的问题。你有一个多线模式。 This可能会有所帮助。也可以考虑使用Python代替:
#!/usr/bin/env python
f = open('doc.txt', 'r')
doc = f.read()
f.close()
f = open('VERSION.header', 'r')
versionHeader = f.read()
f.close()
doc = doc.replace('_VERSION_HEADER_', versionHeader)
print doc
虽然这可能效率较低。
谢谢,我们现在试图将它保存在bash中,因此它可以移植到不总是有python的系统。 错误:sed:1:“DOCUMENTATION”:D命令末尾的额外字符 – user170579 2010-06-19 18:31:20
怎么是这样的:
#!/bin/bash
while read oneline; do
VERSION_HEADER=${VERSION_HEADER}'\n'${oneline};
done < VERSION.header
sed 's/_VERSION_HEADER_/'"${VERSION_HEADER}"'/g' DOCUMENTATION
试试这个:
sed -e '/_VERSION_HEADER_/{r VERSION.header' -e ';d}' DOCUMENTATION
,读取文件时,发现模板字符串,然后删除模板字符串。
我收到一个错误:sed:1:“; d} \ n”:d命令末尾的多余字符 – user170579 2010-06-19 18:38:44
@allentown :它适用于我使用GNU sed 4.2.1。你有什么版本(以及什么操作系统和版本)? – 2010-06-19 19:17:52
@ user170579:尝试不用分号 - 某些版本的“sed”不喜欢它们。 – 2011-01-27 05:45:18
AWK
awk 'FNR==NR{s=s" "$0"\n";next}/_VERSION_HEADER_/{$0=s}1' version.header documentation
也许看看男人1版,以及:
# http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed
[[ $(grep -c _VERSION_HEADER_ DOCUMENTATION) -eq 1 ]] && \
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s DOCUMENTATION
H
/_VERSION_HEADER_/i
.
.c
.
.r VERSION.header
wq
EOF
使用(FreeBSD的)SED做这样的事情:
VERSION_HEADER="$(sed -E -e 's/\\/\\\\/g' -e 's/&/\\\&/g' -e 's|/|\\/|g' -e 's/$/\\/g' VERSION.header)"
# note the space after ${VERSION_HEADER}
sed -E -i "" "/_VERSION_HEADER_/s/_VERSION_HEADER_/${VERSION_HEADER} /" DOCUMENTATION
你需要逃脱您的文字:
text=$(cat VERSION.header);
escaped_text=$(echo "$text" | sed 's/[/\\&]/\\&/g;s/$/\\/;$s/\\$//')
sed "s/_VERSION_HEADER_/$escaped_text/g" DOCUMENTATION
你有什么结果? – hudolejev 2010-06-19 11:14:12
[用变量(sed)替换文本](http:// stackoverflow。com/questions/16297052/replace-a-text-with-a-variable-sed) – tripleee 2013-08-30 09:32:42