linux sed 使用 我有个1.sh文件内容如下 sed -i 's/$1/$2/g' 1.txt

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux sed 使用 我有个1.sh文件内容如下 sed -i 's/$1/$2/g' 1.txt相关的知识,希望对你有一定的参考价值。

其中$1 $2 就是 ./1.txt one first 后面的参数 one 和first
就是将1.txt中 的one 替换为first
但是我的写法肯定替换不了,请问sed 如何替换传递的参数值

两种方法,

一,单引号改为双引号
sed -i "s/$1/$2/g" 1.txt

二,把shell变量$1和$2拿到单引号外面来
sed -i 's/'$1'/'$2'/g' 1.txt

原因其实就是单引号会消除$取值符号的特殊含义,$只会被解析为字符本身。
参考技术A sed -i 's/'$1'/'$2'/g' 1.txt
用单引号把shell变量扩起来

Linux之Shell编程(16)--sed关键字详解演示

今天继续演示sed的其它用法。
-f:把多个子命令操作写入脚本文件,然后使用 -f 选项来指定该脚本

test.sh内容:

sed.sh内容:

注意:
脚本文件中的子命令串不需要输入单引号。

执行结果:

sed常用flags标记

g:对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。(这部分已演示)

w: 将缓冲区中的内容写到指定的 file 文件中
data.txt内容:

结果:

运行后file.txt内容

可以发现,w的作用就是将符合指令变化的行的内容输出到另一个文件中,输出的文件为指令中的操作的文件,末尾的文件为原始文件。

注意:
1.sed ‘s/1/x/w file.txt’ data.txt
这条指令的意思是,将data.txt中经过处理变化(1变为x)后的行的内容,输出到file.txt中。
输出后,data.txt内容不变,file.txt会清掉原来内容,只会接收data.txt中变化后的行的内容。

指令前内容:

指令后内容

2.如果改为sed -i ‘s/1/x/w file.txt’ data.txt
结果如下

可以看到:data.txt中的内容也会改变,但file.txt依旧会先清除原始文件内容,再接收data.txt变化的内容。

r将一个文件的数据插入到当前数据流的指定位置

file.txt内容:

data.txt内容:

指令运行结果:

运行后的data.txt内容

注意:
sed -i ‘2r file.txt’ data.txt
这条指令的意思是,将file.txt中的内容输出到data.txt的第二行之后。不加-i不会改变data.txt文件内容。

以上是关于linux sed 使用 我有个1.sh文件内容如下 sed -i 's/$1/$2/g' 1.txt的主要内容,如果未能解决你的问题,请参考以下文章

关于linux的sed用法。如何替换特殊字符,如IP=192.168.0.1替换成IP=117.112.3.8

如何用sed命令替换一行中的某个字符串

Linux截取文件指定行数之间的内容

Linux命令sed

Linux基本命令之sed

如何批量执行sql查找替换?