我已经尝试过无数种方式,时间放弃并向主人询问......
#!/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_'当前存在于文档DOCUMENTATION中的第1行。文件'VERSION.header'中有大约18行。
我不喜欢使用sed。我所要做的就是读取一个充当模板的文件,将文件数据存储为变量,读入第二个文件,将其存储为变量。在第二个文件中查找标记,将标记替换为第一个文件中的数据。
示例:
$ cat VERSION.header
hi, this is my header file, how are you today
good, that is nice, great
have a nice day, k, thx, bye.
$ cat DOCUMENTATION
_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,再见。
#这是一个文档文件,请阅读它 #如果你不读它,你就会被困在马桶上。
答案 0 :(得分:1)
尝试一下:
sed -e '/_VERSION_HEADER_/{r VERSION.header' -e ';d}' DOCUMENTATION
在找到模板字符串时读取文件,然后删除模板字符串。
答案 1 :(得分:0)
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
但这可能效率较低。
答案 2 :(得分:0)
AWK
awk 'FNR==NR{s=s" "$0"\n";next}/_VERSION_HEADER_/{$0=s}1' version.header documentation
答案 3 :(得分:0)
也许看看男士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
答案 4 :(得分:0)
使用(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
答案 5 :(得分:0)
你需要转义你的文字:
if ContentType = '' then begin
if (ContentText <> '') or (Assigned(ContentStream)) then begin
ContentType := 'text/html; charset=ISO-8859-1'; {Do not Localize}
答案 6 :(得分:-1)
这样的事情怎么样:
#!/bin/bash
while read oneline; do
VERSION_HEADER=${VERSION_HEADER}'\n'${oneline};
done < VERSION.header
sed 's/_VERSION_HEADER_/'"${VERSION_HEADER}"'/g' DOCUMENTATION