如何在 Ubuntu 中的许多文件中更改 ^L 代码?

Yan*_*ang 8 bash perl

我有很多 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如果每行有多个实例,则添加修饰符)。