代码拉取完成,页面将自动刷新
同步操作将从 deepinwiki/wiki 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
在 linux 的世界中,shell 是很重要的一环。而 shell 脚本经常处理的内容是文本。sed 作为一个文本处理的好手,很多时候可以派上用场。
sed 和 awk、grep 并称文本处理三剑客:
大多数情况,sed 一次处理一行,但支持对一行多次编辑。因此应该形成一个概念模型,1.流特性;2.一次读取一行,操作的都是针对某一行。某些操作,它是跨行的,即和 \n 换行符相关,这时就不能用到简单的 sed 命令了。
但是,sed 也是可以多行处理的,只是那样就很繁琐了,尽量使用更强大的工具,如 awk。
如何理解流的特性,如果一个文件有 500 行,它实际上是将你指定的命令操作,都依次在这 500 行运行一次,谨记这点。
sed 语法格式: sed [选项] 命令 文件
实例:
# 原文是一个多行文本,所以 sed 会执行三次
# 用限定范围/bbb/,让子命令只在匹配的时候执行一次
# s 命令使用正则表达式替换内容为 xxx
# p 命令输出当前范围的内容,即原本的bbb,已经修改为 xxx
# 所以最终结果 xxx
echo -e "aaa\nbbb\nccc" |sed -n "/bbb/{s/bbb/xxx/g;p}"
命令:
sed 概念,当前工作的空间叫模式空间 (pattern space),而临时空间叫保持空间。sed 工作的时候不改变原文,而只在模式空间工作。除非你指定 -i 参数,将直接改变原文。
sed 工作的流程是,读取一行到模式空间,接着处理,然后删除模式空间的内容,并读取第二行。因此,无论如何,它都无法同时处理两行数据。除非读取两行的内容到模式空间。
例子:
# 一次性读取所有行
# 我们这里是想将a\nb 替换为 ab,因为跨行了,所以单行模式处理不了
# 先把所有行写入保持空间,然后读取到模式空间(相当于合并了所有行)
# 1h 第一行覆盖保持空间内容
# 1!h 非第一行追加到保持空间
# 为何不用 1,$ H 或者 H,因为默认保持空间有个空行(我们不需要)。
# ${} 最后一行时,内容已经完全合并到保持空间,我们执行实际的操作
# ${g; ...} 读取内容到模式空间,替换掉当前内容(即ccc)
# ${...s/a\nb/ab/g...} 因为合并了,所以可以进行多行替换
# ${...p} 输出当前行内容,注意子命令都被 $ 范围限定的,理解这点很关键
echo -e "aaa\nbbb\nccc" |sed -n '1h;1!H;${g;s/a\nb/ab/g;p}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。