相关疑难解决方法(0)

sed命令在文件中查找和替换并覆盖文件不起作用,它会清空文件

我想通过命令行在HTML文件上运行查找和替换.

我的命令看起来像这样:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html > index.html
Run Code Online (Sandbox Code Playgroud)

当我运行它并在之后查看该文件时,它是空的.它删除了我的文件的内容.

当我再次恢复文件后运行它:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html
Run Code Online (Sandbox Code Playgroud)

stdout是文件的内容,并且已执行查找和替换.

为什么会这样?

unix shell sed io-redirection

582
推荐指数
9
解决办法
70万
查看次数

使用-i选项的sed命令在Mac上失败,但适用于Linux

我已成功使用以下sed命令在Linux中搜索/替换文本:

sed -i 's/old_link/new_link/g' *
Run Code Online (Sandbox Code Playgroud)

但是,当我在Mac OS X上试用它时,我得到:

"命令c期望\后跟文本"

我以为我的Mac运行普通的BASH shell.这是怎么回事?

编辑:

根据@High Performance,这是由于Mac sed具有不同的(BSD)风格,因此我的问题是如何在BSD中复制此命令sed

编辑:

以下是导致此问题的实际示例:

sed -i 's/hello/gbye/g' *
Run Code Online (Sandbox Code Playgroud)

linux macos bash sed

271
推荐指数
9
解决办法
17万
查看次数

在Linux中查找-exec shell函数?

有没有办法find执行我在shell中定义的函数?例如:

dosomething () {
  echo "doing something with $1"
}
find . -exec dosomething {} \;
Run Code Online (Sandbox Code Playgroud)

结果是:

find: dosomething: No such file or directory
Run Code Online (Sandbox Code Playgroud)

有没有办法让find-execdosomething

linux bash shell bsd find

169
推荐指数
8
解决办法
7万
查看次数

使用-i选项(就地编辑)的sed命令在Ubuntu上工作正常,但在Mac上工作正常

我对Sed一无所知但是需要这个命令(在Ubuntu上运行正常)才能在Mac OSX上运行:

sed -i "/ $domain .*#drupalpro/d" /etc/hosts
Run Code Online (Sandbox Code Playgroud)

我越来越:

sed: 1: "/etc/hosts": extra characters at the end of h command
Run Code Online (Sandbox Code Playgroud)

linux macos bsd sed inplace-editing

95
推荐指数
4
解决办法
6万
查看次数

没有给我正确的替代操作与Mac换行 - GNU sed和BSD/OSX sed之间的差异

我正在使用这个参考:sed help:匹配和替换文字"\n"(不是换行符)

我有一个文件"test1.txt",其中包含一个字符串hello \ngoodbye

我使用此命令搜索并用实际的换行符替换"\n":

sed -i '' 's/\\n/\n/g' test1.txt
Run Code Online (Sandbox Code Playgroud)

但结果是:hellongoodbye.它只是将"\n"替换为"n"而不是实际的新行.这与/ t相同,它将留下"t"而不是选项卡.

''是针对MAC中未定义的错误:http://mpdaugherty.wordpress.com/2010/05/27/difference-with-sed-in-place-editing-on-mac-os-x-vs-linux /

更新:

我已经尝试了@ hek2mgl建议的两个命令:

sed -i 's/\\n/\n/g' test.txt
# Or:
sed -i'' 's/\\n/\n/g' test.txt
Run Code Online (Sandbox Code Playgroud)

虽然它们可能适用于Linux,但使用MAC OS时出现以下错误:

sed: 1: "test1.txt": undefined label 'est1.txt'
Run Code Online (Sandbox Code Playgroud)

不知道为什么我不能让这个工作.提前致谢.

macos bsd gnu sed

15
推荐指数
2
解决办法
2万
查看次数

如何在unix(osx)中搜索/替换一堆文本文件

我有一个正则表达式,我在http://regexpal.com/上成功测试过:

^(\".+?\"),\d.+?,"X",-99,-99,-99,-99,-99,-99,-99,(\d*),(\d*)
Run Code Online (Sandbox Code Playgroud)

我的测试数据如下:

"AB101AA",10,"X",-99,-99,-99,-99,-99,-99,-99,394251,806376,179,"S00","SN9","00","QA","MH","X"
"AB101AF",10,"X",-99,-99,-99,-99,-99,-99,-99,394181,806429,179,"S00","SN9","00","QA","MH","X"
"AB101AG",10,"X",-99,-99,-99,-99,-99,-99,-99,394251,806376,179,"S00","SN9","00","QA","MH","X"
"AB101AH",10,"X",-99,-99,-99,-99,-99,-99,-99,394371,806359,179,"S00","SN9","00","QA","MH","X"
"AB101AJ",10,"X",-99,-99,-99,-99,-99,-99,-99,394171,806398,179,"S00","SN9","00","QA","MH","X"
"AB101AL",10,"X",-99,-99,-99,-99,-99,-99,-99,394331,806530,179,"S00","SN9","00","QA","MH","X"
Run Code Online (Sandbox Code Playgroud)

我想\1,\2,\3在每一行上替换它,所以例如第1行会给出

"AB101AA",394251,806376
Run Code Online (Sandbox Code Playgroud)

如何运行此正则表达式搜索并替换osx中我的文件夹中的所有csv文件?我尝试使用sed,但抱怨语法错误(加上我不确定它会支持这个正则表达式吗?).另外,^(行的开头)和$(行尾)锚点会逐行工作,还是会匹配文件的开头和结尾?

更新:一些很好的响应有cut,awk等从csv获取特定字段,但我最近了解到我需要从该列表中取出数字并将它们分成2个子值,所以我的上面的示例输出需要看起来像:

"AB101AA",3,94251,8,06376
Run Code Online (Sandbox Code Playgroud)

据我所知,我需要使用正则表达式.

regex unix macos replace sed

4
推荐指数
1
解决办法
810
查看次数

Sed给出"sed:1:"tsunit.js":undefined label'sunit.js'"

短暂的任务,为什么这一行

sed -i '1s/^/#!\/usr\/bin\/env node\n/' tsunit.js;\
Run Code Online (Sandbox Code Playgroud)

给我这个错误

sed: 1: "tsunit.js": undefined label 'sunit.js'
Run Code Online (Sandbox Code Playgroud)

在Makefile中,如果相关的话.

我在Mac上.

bash makefile sed

4
推荐指数
1
解决办法
1063
查看次数

在没有备份文件的情况下使用sed -i Mac OSX

我发现了这篇文章:OSX和GNU / Linux之间sed的变体

没有备份文件的SED

后者提供了在Mac OSX上使用sed -i的解决方案,这样它就不会在搜索和替换命令上创建后退文件。

例如,请注意-i选项后的单引​​号空格单引号,以指定长度为零的扩展名:

sed -i ' ' 's/foo/|bar/g' test.html
Run Code Online (Sandbox Code Playgroud)

我的问题-这确实为我创建了一个备份文件,并且为备份文件提供了与我的输入文件“ test.html”相同的名称。

我需要对许多文件运行搜索/替换,并且我不希望备份文件。

这是我的实际命令:

sed -i ' ' "s|research/projects/vertebrategenome/havana/|science/groups/vertebrate-annotation|g" test2.html
Run Code Online (Sandbox Code Playgroud)

在哪里获得一个名为“ test2.html”的备份文件

macos sed

4
推荐指数
1
解决办法
1068
查看次数

如何在 OSX 中使用 sed 将每个单词的第一个字母大写

我正在尝试使用以下 sed 命令将字符串中每个单词的第一个字母大写,但它不起作用:

 echo "my string" | sed 's/\b\(.\)/\u\1/g'
Run Code Online (Sandbox Code Playgroud)

输出:

 my string
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢

macos bash sed pipe capitalization

3
推荐指数
1
解决办法
4515
查看次数

使用Awk或Sed来处理特定行末尾的语句

我有一个我命名的文件poscar1.cif,我想在此文件的特定行插入变量的内容.

例如,line 24,当前读取:

_cell_length_a
Run Code Online (Sandbox Code Playgroud)

我想添加我的变量的内容a(在我的函数中定义a=5.3827),这样该行现在读取:

_cell_length_a 5.3827
Run Code Online (Sandbox Code Playgroud)

有没有办法用sed或awk做到这一点?我正在使用bash脚本来完成此任务(不幸的是,完整的脚本太大而无法发布).

bash awk sed

2
推荐指数
1
解决办法
423
查看次数

标签 统计

sed ×9

macos ×6

bash ×5

bsd ×3

linux ×3

shell ×2

unix ×2

awk ×1

capitalization ×1

find ×1

gnu ×1

inplace-editing ×1

io-redirection ×1

makefile ×1

pipe ×1

regex ×1

replace ×1