我需要在变量中替换此脚本中的sed
行,并在使用后只需变量。
cat postfix > "file.html"
cal -h | sed '1{s|^|<table>\n<tr><th colspan="7">|;s|$|</th></tr>|};2,${s|\(..\) |<td>\1</td>|g;s|^|<tr>|;s|$|</tr>|};$s|$|\n</table>|' >> file.html
cat prefix >> "file.html"'
答案 0 :(得分:0)
类似
expression='1{s|^|<table>\n<tr><th colspan="7">|;s|$|</th></tr>|};2,${s|\(..\) |<td>\1</td>|g;s|^|<tr>|;s|$|</tr>|};$s|$|\n</table>|'
cat postfix > "file.html"
cal -h | sed "${expression}" >> file.html
cat prefix >> "file.html"
(并注意到通常人们会期望前缀在头部,而后缀在最后......;但那是人们所期望的,基于他们的名字)
答案 1 :(得分:0)
虽然在这种情况下sed
可以解决问题,但我认为如果需要维护此代码并不是一个好主意。
关于文件前后的一个小注释:一般来说,前缀是你之前放的东西,后缀是你放的东西。反过来这样做会增加混乱。
你想要的是将第一行作为标题,将其余部分拆分为表格单元格。
cal -h > tempfile
cat postfix > "file.html"
echo '<table>' >> "file.html"
echo '<tr><th colspan="7">' >> "file.html"
head -1 tempfile >> "file.html"
echo '</th></tr>' >> "file.html"
tail +1 | sed 's/^/<tr>;s/\(/<td>/g;s/\)/<\/td>/g;s/$/<\/tr>/' >> "file.html"
echo '</table>' >> "file.html"
rm tempfile
已经使它更具可读性。
甚至更进一步:
first=yes
cat postfix > "file.html" #sic
echo '<table>' >> "file.html"
cal -h | while read line ; do
if [ $first = yes ] ; then
first=no
echo "<tr><th colspan=\"7\">$line</th></tr>" >> "file.html"
else
tdopen=${line//\(/<td>}
tdclose=${tdopen//\)/<\/td>}
echo "<tr>$tdclose</tr>" >> "file.html"
fi
done
echo '</table>' >> "file.html"
cat prefix >> "file.html" #sic
我认为,比sed
更容易阅读。但这只是我个人的偏好。