【问题标题】:replace in java file using sed or perl a minify javascript source使用 sed 或 perl 替换 java 文件中的缩小 javascript 源
【发布时间】: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

标签: perl unix sed terminal


【解决方案1】:

Sed 可以使用r 命令直接将一个文件的内容读入另一个文件,而不需要一个引入引用和转义问题的噩梦的中间 shell 变量。

这会转到第 19 行并在此时读取文件 javascript.minify.js

sed '19 r javascript.minify.js' ./Original.java > ./Replace.java

这会在 Original.java 的第 19 行之后添加 .js 文件的内容,而您的原始文件会替换第 19 行的内容。为了达到相同的效果,您可以在添加文件内容后删除第 19 行:

sed -e'19 r javascript.minify.js' -e'19 d'  ./Original.java > ./Replace.java

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 2015-11-18
    • 2019-07-03
    • 1970-01-01
    • 2014-01-24
    • 2020-01-17
    • 2014-07-30
    • 2012-11-30
    • 2017-01-27
    相关资源
    最近更新 更多