在 shell/bash 中的几个文件中将 '>' 替换为 '>\n'
Replace '>' with '>\n' in several files in shell/bash
我在一个文件夹中有几个文件,我想将所有这些文件中的字符 >
替换为 >\n
。
但是无论我做什么,\n
字符都不会添加到 >
字符之后。
我试过以下方法:
echo '>ABCCHACAC' | tr '\>' '>\n'
echo '>ABCCHACAC' | tr '>' '>\n'
echo '>ABCCHACAC' | tr '>' '>\n'
echo '>ABCCHACAC' | tr '>' '\>\n'
echo '>ABCCHACAC' | tr '>' '\>\n'
echo '>ABCCHACAC' | tr '>' '\>\n'
但是我得到了与输出相同的输入字符串,而我想要的正确输出是:
>
ABCCHACAC
我正在使用这个脚本对许多文件做同样的事情:
for f in *.txt
do
tr ">" ">\n" < "$f" > $(basename "$f" .txt)_newline_added.txt
done
tr
用于一对一字符替换,而不是替换字符串。例如。如果您将 abc
翻译为 def
,它会将所有 a
替换为 d
,将所有 b
替换为 e
,并将所有 c
替换f
。当第二个字符串比第一个长时,多余的字符将被忽略。所以tr '>' '>\n'
的意思是用>
代替>
,忽略\n
.
使用 sed
执行字符串替换。
sed 's/>/>\n/g' "$f" > "$(basename "$f" .txt)_newline_added.txt"
除了 Barmar 的回答之外,如果您使用的是基于 BSD 的 *nix(例如 OS X),您将需要包含一个转义文字换行符,或者可能使用 tr
除了 sed
.
转义文字换行符:
$ sed 's/^>/>\
/' "$f"
sed
和 tr
:
$ sed 's/^>/>▾/' "$f" | tr '▾' '\n'
↳
我在一个文件夹中有几个文件,我想将所有这些文件中的字符 >
替换为 >\n
。
但是无论我做什么,\n
字符都不会添加到 >
字符之后。
我试过以下方法:
echo '>ABCCHACAC' | tr '\>' '>\n'
echo '>ABCCHACAC' | tr '>' '>\n'
echo '>ABCCHACAC' | tr '>' '>\n'
echo '>ABCCHACAC' | tr '>' '\>\n'
echo '>ABCCHACAC' | tr '>' '\>\n'
echo '>ABCCHACAC' | tr '>' '\>\n'
但是我得到了与输出相同的输入字符串,而我想要的正确输出是:
>
ABCCHACAC
我正在使用这个脚本对许多文件做同样的事情:
for f in *.txt
do
tr ">" ">\n" < "$f" > $(basename "$f" .txt)_newline_added.txt
done
tr
用于一对一字符替换,而不是替换字符串。例如。如果您将 abc
翻译为 def
,它会将所有 a
替换为 d
,将所有 b
替换为 e
,并将所有 c
替换f
。当第二个字符串比第一个长时,多余的字符将被忽略。所以tr '>' '>\n'
的意思是用>
代替>
,忽略\n
.
使用 sed
执行字符串替换。
sed 's/>/>\n/g' "$f" > "$(basename "$f" .txt)_newline_added.txt"
除了 Barmar 的回答之外,如果您使用的是基于 BSD 的 *nix(例如 OS X),您将需要包含一个转义文字换行符,或者可能使用 tr
除了 sed
.
转义文字换行符:
$ sed 's/^>/>\
/' "$f"
sed
和 tr
:
$ sed 's/^>/>▾/' "$f" | tr '▾' '\n'
↳