在OSX中查找和替换grep和sed

时间:2014-01-21 13:25:22

标签: macos sed terminal

我正在尝试使用#archive替换同一目录中的一堆文件中的字符串~archive。我的文件名中包含空格并且相当长。我检查过,有人说我必须用-Z调用grep,用-0调用xargs。所以我做到了。

我当前的终端命令是:

grep -lZ '#archive' ~/dropbox/documents/notes/Archive/* | xargs -0 sed -i "" 's|#archive|~archive|g'

我得到的输出是:

sed: /Users/bobthebuilder/dropbox/documents/notes/Archive/20130824_1553_I_Kino Interesting Books.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/20131003_1011_R_ExpensesOct13.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/20131111_1205_RI_SocialConnect.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/20131111_2233_I_GymNov13Dec13.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/20131112_1121_I_LifeChallenge.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/20131112_1242__PaperlessLiving.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/20131112_1243__Polymath.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/20131112_1327__ORDPlanning.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/20131124_1126__YunheProjectExcel.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/Contact Information.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/Excruciatingly Useful Shortcuts.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/How does this thing work?.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/Mail Migration.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/Markdownify.txt
/Users/bobthebuilder/dropbox/documents/notes/Archive/This is the title of a note.txt
: File name too long

没有任何东西被替换。

我也尝试过:

| => grep -l --null '#archive' ~/dropbox/documents/notes/Archive/* | xargs -0 sed -i "" 's|#archive|~archive|g'
sed: RE error: illegal byte sequence

帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

如果文件在同一个文件夹中

sed -i "" 's/#archive/~archive/' ~/dropbox/documents/notes/Archive/*

答案 1 :(得分:3)

如果您要将-i arg用于sed,则需要将命令字符串放在-e之后。

grep -l --null '#archive' ~/dropbox/documents/notes/Archive/* | xargs -0 sed -e 's|#archive|~archive|g' -i "" 

然而,@ NeronLeVelo的答案也是正确的,如果你不需要递归(你没有使用),那么答案会更简单。