shell中sed命令失灵,又一个坑。。。

今天写shell的时候用到了sed,原本是要删除所有包含指定字符的行

由于shell用的不是很熟练,所以在命令行上敲了好几遍,发现没有问题,结果放到shell里就不行了,直接看代码(代码被处理了,主要是表达清楚意思)

有问题得代码如下

export a="xxx xxx = xxxx"

export file_full_path=xxx/xxx/xxx/xxx

echo "'/$a/d' $file_full_path"

sed -i '/$a/d' $file_full_path


因为shell里将sed这句话原封不动的打印了出来,结果发现一个诡异的现象,shell运行后sed没有生效,但是将运行shell时打印的命令复制粘贴运行发现居然能过!

查询资料后发现,原来在shell里用sed,如果有$这样的特殊字符,单引号要换成双引号才可以


这个坑,我先躺了~

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: sed命令是一种文本处理工具,可以用于对文本进行替换、删除、插入等操作。它通常与管道符一起使用,可以方便地对文本进行批量处理。sed命令的语法比较复杂,但是掌握了它的基本用法,就可以轻松地处理文本文件。 ### 回答2: sed是Linux系统强大的文本处理工具,它的全称为Stream Editor,其功能主要用来对文本进行替换、删除、插入、追加、打印等无数用途。它可以满足编程人员对文本处理的各种要求,是命令行编程十分常用的一个工具。 sed命令的一般格式为: ``` sed [选项] 'sed命令' 文件名 ``` 其,选项可以为空,也可以是: - -n:只打印修改过的行 - -i:替换原文件 sed命令的具体用法: 1.删除 使用sed命令可以轻松删除想要去除的文本的行或者一个词语。例如,在文件删除含有某个特定字符串的所有行,我们可以使用如下命令: ``` sed '/特定字符串/d' 文件名 ``` 此时,文件与特定字符串匹配的所有行都将被删除。 如果需要清除一段文本包含的所有注释,我们可以使用如下命令: ``` sed -i '/^#/d' 文件名 ``` 这个命令会删除包含在行首的所有以#开头的注释行。 2.替换 虽然像vim这样的文本编辑器也可以替换字符串,但是在sed处理这个任务更快更有效率。下面是一段用于替换文件内容的sed命令: ``` sed 's/原字符串/新字符串/g' 文件名 ``` 这个命令会将文件所有的“原字符串”全部替换成“新字符串”,并将结果输出到命令行。 除此之外,我们还可以使用类似如下形式的命令: ``` sed '/要替换的文本/s/替换前的字符串/替换后的字符串/g' 文件名 ``` 这个命令会直接查找到要替换的文本,并将其内部的“替换前的字符串”全部替换成“替换后的字符串”。 3.插入和追加 使用sed命令,可以在文件插入新的文本,通常新文本会作为一个新行插入到原文件的某一行之后。为了插入,我们可以用如下命令: ``` sed -i '/想要插入的行数/a 插入行内容' 文件名 ``` 这个命令会将“插入行内容”插到文件的“想要插入的行数”所在行之后。 4.打印 最后,我们也可以使用sed命令来打印指定的文本,通过这样的方式我们可以筛选文本的重点信息。使用sed进行文本打印时可以用如下语法: ``` sed -n '需要打印的行号' 文件名 ``` 例如,如果我们需要打印一个文件的前5行,可以使用如下命令: ``` sed -n '1,5p' 文件名 ``` 这个命令会打印出文件的前5行,输出到命令行。 总之,sed是Linux编程不可或缺的基本工具之一,它的强大功能可以简化文件管理、文本处理和脚本编写的过程,对于Shell编程来说是一种非常重要的技能。 ### 回答3: sed一个非常强大的文本处理工具,其含义是“流编辑器(stream editor)”,是用于过滤和转换文本的工具之一,其可将文本流进行处理,可以取代大部分grep命令功能,而且其功能极其强大。一般在命令行下直接执行,也可以应用正则表达式RE将文本的指定字符串进行替换。 1.替换命令shellsed最常用的命令之一就是替换命令,语法格式为:sed 's/old/new/g' filename 其,s为替换命令的操作符,old代表原来的字符串,new代表新的字符串,g表示全局替换,也就是一行内所有字符串替换。这个命令可以在一个文件替换多个字符串,替换所有匹配到的字符串。文件名可以是多个,也可以使用通配符。 2.删除命令 除了替换命令sed还可以用于删除,删除命令的语法格式为:sed '/pattern/d' filename 其,pattern表示匹配的字符串,在该文件所有匹配的行都将被删除掉。 3.插入和追加命令 此外,sed还可以用于在指定的行前插入文本或在指定的行后追加文本。插入命令的语法格式为:sed '/pattern/i\insert text' filename,其插入文本按照需要进行定义,而追加则是sed '/pattern/a\append text' filename。 4.打印命令 sed还可以用于打印出符合条件的行。打印命令的语法格式为:sed -n '/pattern/p' filename。其,-n选项的作用是只输出匹配到的行,p选项则是打印出匹配到的行。 5.替换文本方式 在sed的替换命令,有三种常用的替代符:/、! 和#,它们一个用于分离 sed 命令的三个部分:地址、命令和选项。您在使用这些符号时可以选择其他符号来代替为补充其实现使用的特性来简化编码和排错。 总之,sed是一款非常实用的文本处理工具,在Linux系统有很大的应用场景,特别适合需要在命令操作的用户,可以大大提高工作效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值