我有很多 XML 文件,其中超过 50000 个。
在一些XML文件中,一些文件是这样写的
<filename>abc.JPEG<^Lilename>
Run Code Online (Sandbox Code Playgroud)
^L只是一个字符,但我找不到^LGoogle 的含义。
当我cat用来打印文件的内容时,它显示如下
<filename>abc.JPEG<
ilename>
Run Code Online (Sandbox Code Playgroud)
无论如何,我想换<filename>abc.JPEG<^Lilename>到<filename>abc.JPEG</filename>
我已经找到了一些命令来更改许多文件中的单词,例如
find . -exec perl -pi -e 's/[find_word]/[change_word]/g' {} \;
Run Code Online (Sandbox Code Playgroud)
但是该命令在我的情况下不起作用,因为当我输入时它无法识别搜索词^L。
如何在多个文件中更改<filename>abc.JPEG<^Lilename>为<filename>abc.JPEG</filename>?
ste*_*ver 17
Control-L(表示为^L)是“换页”字符。在 ASCII 中,它具有十进制值 12(L是字母表的第 12 个字母)或十六进制值 0c:
$ printf 'foo\x0cbar\n' | cat -et
foo^Lbar$
$ printf 'foo\x0cbar\n'
foo
bar
Run Code Online (Sandbox Code Playgroud)
您可以使用 sed 等工具通过指定十六进制转义码来替换它:
$ printf 'foo\x0cbar\n' | sed 's/\x0c//'
foobar
Run Code Online (Sandbox Code Playgroud)
或者,^L直接使用键盘序列CTRL+ V CTRL+L
sed 's/CTRL+VCTRL+L//'Run Code Online (Sandbox Code Playgroud)
对于您的特定更换,给定
$ printf '<\x0cilename\n'
<
ilename
Run Code Online (Sandbox Code Playgroud)
然后
$ printf '<\x0cilename\n' | sed 's/<\x0c/<\/f/g'
</filename
Run Code Online (Sandbox Code Playgroud)
(g如果每行有多个实例,则添加修饰符)。