Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 替换单词的通用脚本_Bash_Perl_Unix_Sed - Fatal编程技术网

Bash 替换单词的通用脚本

Bash 替换单词的通用脚本,bash,perl,unix,sed,Bash,Perl,Unix,Sed,我知道有几种类似的方法,比如sed、perl,它们可以替换文本文件中的单词 当从unix终端键入时,我试图创建一个别名,比如说rep word1 word1 filename,但执行相同的操作 其中rep将是alias,内部将使用sed实用程序替换单词。文件名中的word1将替换为word2 请帮我想出这样的实用程序 此外,word1和word2应注意特殊字符。主要目的是用户可以执行此类操作,而不必担心sed/perl一行程序的使用。像下面这样的perl一行程序可以很好地工作: alias re

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

当从unix终端键入时,我试图创建一个别名,比如说rep word1 word1 filename,但执行相同的操作

其中rep将是alias,内部将使用sed实用程序替换单词。文件名中的word1将替换为word2

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


此外,word1和word2应注意特殊字符。主要目的是用户可以执行此类操作,而不必担心sed/perl一行程序的使用。

像下面这样的perl一行程序可以很好地工作:

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

rep foo bar file.txt
说明: 开关:

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

BEGIN{$s,$r=splice@ARGV,0,2}:将前两个参数拉入变量中进行搜索和替换。 s/\Q$s/$r/g:将$s的所有引用替换为$r
不能使用别名执行此操作,因为别名不能替换参数。您需要使用脚本或shell函数。请显示您迄今为止尝试的内容。因此,这不是一个免费的代码编写服务,我们将帮助您修复代码。sed的/word1/word2/g文件名是否有效?感谢Barmar的鼓励:我现在就可以这样做了。我将$1和$2 shell变量传递到sed s/$1/$2/g中。这个工具我化名为代表,现在正在工作。非常感谢