如何使用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
ne5o7dgx1#
您看到的是控制字符,您可以简单地使用tr删除它们
tr
cat your_file | tr -d '\b\r'
这样更好:
tr -d '\b\r' < your_file
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
1sbrub3j3#
为了删除每行末尾出现的^M个字符,我通常在vi编辑器中这样做。
:%s/.$//g
它只是删除每行的最后一个字符,而不管该字符是什么。这解决了我的问题。
pobjuy324#
使用sed实用程序。根据examples,参见下文:
sed
sed 's/%//' file > newfile echo "82%%%" | sed 's/%*$//' echo "68%" | sed "s/%$//" #assume % is always at the end.
w8biq8rn5#
您可以使用tr删除所有控制字符,例如
tr -d "[:cntrl:]" file.txt
要排除其中的一些(如行尾),请检查:Removing control characters from a file。
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'
5fjcxozz7#
我用的是dos2unix,它很适合我。如果你使用的是基于Debian的发行版,你应该可以执行sudo apt-get install dos2unix。如果您使用的是类似RH的发行版,那么应该能够执行sudo yum install dos2unix。一旦它被安装,你可以只给予目标文件作为一个参数
sudo apt-get install dos2unix
sudo yum install dos2unix
dos2unix file.sh
7条答案
按热度按时间ne5o7dgx1#
您看到的是控制字符,您可以简单地使用
tr
删除它们这样更好:
xj3cbfub2#
两种方法立即浮现在脑海中:
tr -d control+vcontrol+h
sed 's/control+vcontrol+h//g'
以下是两者的作用:
1sbrub3j3#
为了删除每行末尾出现的^M个字符,我通常在vi编辑器中这样做。
它只是删除每行的最后一个字符,而不管该字符是什么。这解决了我的问题。
pobjuy324#
使用
sed
实用程序。根据examples,参见下文:w8biq8rn5#
您可以使用
tr
删除所有控制字符,例如要排除其中的一些(如行尾),请检查:Removing control characters from a file。
iugsix8n6#
如果要更改原始文件,请执行以下操作:
(^M为xlm0nlx xlmlnlx)
(^H为xlm2nlx xlm3nlx)
很多文件,你可以这样做:
5fjcxozz7#
我用的是dos2unix,它很适合我。
如果你使用的是基于Debian的发行版,你应该可以执行
sudo apt-get install dos2unix
。如果您使用的是类似RH的发行版,那么应该能够执行
sudo yum install dos2unix
。一旦它被安装,你可以只给予目标文件作为一个参数