【问题标题】:Replace first instance of matching text on every line in a txt file替换 txt 文件中每一行上匹配文本的第一个实例
【发布时间】:2018-09-13 15:25:32
【问题描述】:

我有一个 .txt 文件,我想替换每行第一次出现的匹配字符串。

例如,下面是 foo.txt 中的内容:

838dbc65cd79e16cf09f90abb928e3f3d0ea2d775cf8edc8acaabde6d393bc76  /Volumes/Documents - Part 1/legos.png
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997  /Volumes/Documents - Part 1/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - Part 1 BU/fedora linux.7z
f3d0ea2d775cf8edc1ddbd76e2562d3e4a2e281fe2aeb1333ef99536d1a180ee  /Volumes/Documents - Part 1/manuals/dryer.pdf
\ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  /Volumes/Documents - Part 1/Test Hash Folder/#;."'&,\\{2}:`!*?$(){}[]<>|-=+% [meowzers] (1)~^^.$[E-frLOL[MAY[]{}()?<NUL>
\9c993445f7f6216b4fc7d35aef47afa16f4f831f2510b7fddd1e42c4cafb518c  /Volumes/Documents - Part 1/Test Hash Folder/#;."'&,\\:`!CAT      MEOW!!![hey]{15}(hello)@$%&^*(#@@*?$(){}[]<>|-=+% ~^^.$[E-frLOL[MAY[]{}()?<NUL>

我想将Documents - Part 1 替换为Documents - Part 1 BU只在每行的第一次出现。

所以,最后应该是这样的:

838dbc65cd79e16cf09f90abb928e3f3d0ea2d775cf8edc8acaabde6d393bc76  /Volumes/Documents - Part 1 BU/legos.png
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997  /Volumes/Documents - Part 1 BU/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - Part 1 BU/fedora linux.7z
f3d0ea2d775cf8edc1ddbd76e2562d3e4a2e281fe2aeb1333ef99536d1a180ee  /Volumes/Documents - Part 1 BU/manuals/dryer.pdf
\ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  /Volumes/Documents - Part 1 BU/Test Hash Folder/#;."'&,\\{2}:`!*?$(){}[]<>|-=+% [meowzers] (1)~^^.$[E-frLOL[MAY[]{}()?<NUL>
\9c993445f7f6216b4fc7d35aef47afa16f4f831f2510b7fddd1e42c4cafb518c  /Volumes/Documents - Part 1 BU/Test Hash Folder/#;."'&,\\:`!CAT      MEOW!!![hey]{15}(hello)@$%&^*(#@@*?$(){}[]<>|-=+% ~^^.$[E-frLOL[MAY[]{}()?<NUL>

我试过了:

cat foo.txt | grep "^.[\]{64}  /Volumes/Documents - Part 1/" | sed "  /Volumes/Documents - Part 1 BU"`

但它没有用。我该如何解决这个问题?

Mac OS X Yosemite、bash 3.2.57(1)-release、grep (BSD grep) 2.5.1-FreeBSD

【问题讨论】:

  • grep "^.[\]{64} : 您正在寻找 1 个字符后跟 64 个 '\' 和行首的 2 个空格

标签: bash macos sed grep text-processing


【解决方案1】:

解决方案一:关注sed 可能对您有所帮助。

sed 's/Documents - Part 1/Documents - Part 1 BU/'   Input_file

第二个解决方案: awk 解决方案。

awk '{sub("Documents - Part 1","Documents - Part 1 BU")} 1'   Input_file

注意:如果您想将输出保存到 Input_file 本身并将 &gt; temp_file &amp;&amp; mv temp_file Input_file 附加到第二个解决方案中,请在上面的代码中使用 sed -i 选项以进行相同的操作。

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2021-06-12
    • 2019-08-27
    相关资源
    最近更新 更多