【问题标题】:General script to replace a word替换单词的通用脚本
【发布时间】:2014-09-27 16:58:54
【问题描述】:

我知道有几种类似 sed、perl 的方法可以替换文本文件中的单词。

我试图创建一个别名,说“rep word1 word1 filename”(从 unix 终端输入时也是如此)

其中 rep 将是别名,它在内部将使用 sed 实用程序来替换单词。 “word1”将被“filename”中的“word2”替换。

请帮助我想出这样的实用程序。

word1 和 word2 也应该注意特殊字符。主要目的是用户可以执行这样的操作,而不用担心使用 sed/perl one liner。

【问题讨论】:

  • 您不能使用别名来执行此操作,因为它们不能替换参数。您需要使用脚本或 shell 函数。
  • 请展示您到目前为止所做的尝试。 SO 不是免费的代码编写服务,我们会帮助您修复代码。
  • “sed 's/word1/word2/g' 文件名”这样的东西会起作用吗?
  • 感谢 Barmar 的鼓励:我现在能够做到这一点。我将 $1 和 $2 shell 变量传递给 sed "s/$1/$2/g" 。这个实用程序我已别名为 rep 现在 正在工作。非常感谢

标签: bash perl unix sed


【解决方案1】:

像下面这样的 perl 单行器可以正常工作:

alias rep="perl -i -pe 'BEGIN {(\$s,\$r) = splice @ARGV, 0, 2} s/\Q\$s/\$r/g'"

并调用它使用

rep foo bar file.txt

说明:

开关

  • -i[extension]:编辑<> 文件(如果提供扩展名,则进行备份)
  • -p:为输入文件中的每个“行”创建一个 while(<>){...; print} 循环。
  • -e:告诉perl 在命令行上执行代码。

代码

  • BEGIN {($s,$r) = splice @ARGV, 0, 2}:将前两个参数拉入变量中以进行搜索和替换。
  • s/\Q$s/$r/g:将$s的所有引用替换为$r

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多