Mac 上简单使用 Sed

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mac 上简单使用 Sed相关的知识,希望对你有一定的参考价值。

参考技术A

如果已安装请忽略,没有安装需要 install 下

注意: Linux Mac 下使用是略有不同的,此处以 Mac 使用的。

分析命令 sed -i "" "s/12345/Hello/" test.txt

sed 全名为 stream editor,流编辑器,用程序的方式来编辑文本,功能相当的强大,此处简单记录下

在 Mac 系统是原生于bsd系, 所以此处添加 和 插入有点奇怪的(a 添加下一行,i 插入上一行)

其他规则如删除差不多,就是要注意 \\ 要换行的,好麻烦

参考: SED 简记 , sed入门详解教程

在mac上使用sed删除文件中第一次出现的字符串[重复]

【中文标题】在mac上使用sed删除文件中第一次出现的字符串[重复]【英文标题】:Removing first occurrence of a string in a file with sed on mac [duplicate] 【发布时间】:2019-04-17 11:36:12 【问题描述】:

来自this 我找到了该命令,它无需任何命令替换即可工作。但是如果我尝试在命令中替换一个变量,我会遇到以下问题。

注意:我使用的是 sed 命令(BSD OSX)/MacOS

要重现,只需使用以下内容创建一个 file.txt:

SOME_TEXT
CHANGE_THIS
CHANGE_THIS
CHANGE_THIS

在终端中添加 TMP 变量:

TMP=export PATH=/Users/Name/with pace/and_variables:$PATH

现在使用这个命令:

sed -i '' "1h; 1 $  x; s/CHANGE_THIS/$TMP/; p; " file.txt

我收到此错误:

sed: 1: "1h; 1 $  x; s/CHANGE_T ...": invalid command code $

在一个 privious 答案中,我得到了这个(“,”添加到“1,$”:

sed -i '' "1h; 1,$  x; s/CHANGE_THIS/$TMP/; p; " file.txt   

预期的输出文件.txt

SOME_TEXT
export PATH=/Users/Name/with pace/and_variables:$PATH
CHANGE_THIS
CHANGE_THIS

我明白了:

SOME_TEXT
SOME_TEXT
SOME_TEXT
SOME_TEXT

【问题讨论】:

既然可以直接将文本粘贴到 sed 命令中,为什么还要使用变量呢?如果你真的想这样做,试试"$TMP" 【参考方案1】:

用途:

sed -i '0,/.*CHANGE_THIS.*/s//my changed line/' file

【讨论】:

MacOS sed 不支持 GNU sed 扩展 0,【参考方案2】:

如果您对awk 没问题,请尝试关注。

##Creating shell variable named TM here.
TMP="export PATH=/Users/Name/with pace/and_variables:$PATH"
awk -v tmp="$TMP" '/CHANGE_THIS/ && ++flag==1$0=tmp 1' Input_file

如果您想将输出保存到 Input_file 本身,请在上面的代码中添加 > temp_file && mv temp_file Input_file

这里也为上面的代码添加解释。

awk -v tmp="$TMP" '              ##Creating an awk variable named tmp whose value is bash variable TMP value.
/CHANGE_THIS/ && ++flag==1      ##Checking condition if a line is having string CHANGE_THIS and variable flag value is 1 then do following.
  $0=tmp                         ##Setting current line value to value of tmp awk variable here.
                                ##Closing the block for condition here.
1                                ##By mentioning 1 printing edited/non-edited line here.
' Input_file                     ##Mentioning Input_file name here.

【讨论】:

谢谢它的工作 - 只是打印到控制台 - 我现在做“awk ...”>> newfile.txt

以上是关于Mac 上简单使用 Sed的主要内容,如果未能解决你的问题,请参考以下文章

Mac系统下 脚本sed的简单使用

使用 sed 删除匹配模式不适用于 mac os Catalina

(转)在 Mac 上使用 `sed` 命令的几个坑

Mac使用GNU版本的sed

在mac上使用sed删除文件中第一次出现的字符串[重复]

sed简单用法