使用Linux shell脚本从文件中删除^H和^M字符

oewdyzsn  于 2023-06-21  发布在  Linux
关注(0)|答案(7)|浏览(255)

如何使用Linux shell脚本从文件中删除^H和^M字符?

^[[0^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H   rcv-packets: 0
^[[0^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H      rcv-errs: 0
     rcv-drop: 0
     rcv-fifo: 0
     rcv-frame: 0
ne5o7dgx

ne5o7dgx1#

您看到的是控制字符,您可以简单地使用tr删除它们

cat your_file |
tr -d '\b\r'

这样更好:

tr -d '\b\r' < your_file
xj3cbfub

xj3cbfub2#

两种方法立即浮现在脑海中:

  • tr -d control+vcontrol+h
  • sed 's/control+vcontrol+h//g'

以下是两者的作用:

$ od -c test
0000000  \b   h   e   l   l   o  \b   t   h   e   r   e  \b  \n
0000016
$ sed 's/^H//g' < test | od -c
0000000   h   e   l   l   o   t   h   e   r   e  \n
0000013
$ tr -d ^H < test | od -c
0000000   h   e   l   l   o   t   h   e   r   e  \n
0000013
1sbrub3j

1sbrub3j3#

为了删除每行末尾出现的^M个字符,我通常在vi编辑器中这样做。

:%s/.$//g

它只是删除每行的最后一个字符,而不管该字符是什么。这解决了我的问题。

pobjuy32

pobjuy324#

使用sed实用程序。根据examples,参见下文:

sed 's/%//' file > newfile
echo "82%%%" | sed 's/%*$//'
echo "68%" | sed "s/%$//" #assume % is always at the end.
w8biq8rn

w8biq8rn5#

您可以使用tr删除所有控制字符,例如

tr -d "[:cntrl:]" file.txt

要排除其中的一些(如行尾),请检查:Removing control characters from a file

iugsix8n

iugsix8n6#

如果要更改原始文件,请执行以下操作:

sed -i '.bak' 's/^M//g ; s/^H//g' test.md

(^M为xlm0nlx xlmlnlx)
(^H为xlm2nlx xlm3nlx)
很多文件,你可以这样做:

find source -name '*.md' | xargs sed -i '.bak' 's/^M//g ; s/^H//g'
5fjcxozz

5fjcxozz7#

我用的是dos2unix,它很适合我。
如果你使用的是基于Debian的发行版,你应该可以执行sudo apt-get install dos2unix
如果您使用的是类似RH的发行版,那么应该能够执行sudo yum install dos2unix
一旦它被安装,你可以只给予目标文件作为一个参数

dos2unix file.sh

相关问题