【发布时间】:2016-02-14 06:49:16
【问题描述】:
我有一个使用 r.js 的缩小 javascript 文件,我需要 将文件的全部内容放在另一个 java 文件中 在第 19 行附近,所以我试试这个命令(Mac):
SRC_FILE=`cat ./javascript.minify.js`
sed "19s/.*/${SRC_FILE}/g" ./Original.java > ./Replace.java
这个命令的结果:
bad flag in substitute command: 'o'
所以我尝试使用 perl:
SRC_FILE=`cat ./javascript.minify.js`
cat Original.java | perl -p -e "s/.*/'${SRC_FILE}'/g if $.==19" > ./Replace.java
这个命令的结果:
Bareword found where operator expected at -e line 1, near "bowels"
syntax error at -e line 1, near "bowels "
Can't find string terminator '"' anywhere before EOF at -e line 1.
我如何告诉 sed 或 perl 替换是一个字符串?
已修复
唯一的方法是使用 base64:
SRC_FILE=`cat ./javascript.minify.js | base64`
sed "19s/.*/${SRC_FILE}/g" ./Original.java > ./Replace.java
感谢您的 cmets 和一切
【问题讨论】:
-
没有 perl 的错误是:文件名太长
-
你说 Perl 的错误是
Bareword found where operator expected at -e line 1, near "bowels"。无论如何,最好使用 Perl 读取 JavaScript 文件,而不是尝试将其存储在 Bash 变量中。 -
当您在 sed 或 perl 情况下使用
/.*/${SRC_FILE}/g时 — 字符串 SRC_FILE(它是 javascript.minify.js 的内容)是否包含 any 斜杠 @ 987654330@?我希望它确实如此,当${SRC_FILE}被其内容替换时,现在您的正则表达式包含太多斜杠,并且变得无效。 -
“唯一的方法是使用base64”——这当然不是唯一的方法。您想在另一个文件中的某个位置插入文件的内容(?);正则表达式似乎是一个糟糕的选择 - 你没有匹配和替换字符串,这不是模式问题。
sed可以做的远不止s/this/that/— 它可以sed '19a Some New Text'在第19 行附加文本。sed不限于命令行上的命令;它可以有一个完整的脚本文件,包括分支。awk是另一种很好的可能性,perl只是使用正则表达式不进行文件处理。man sed