我需要用文件中的空格替换一些不可打印的字符。
具体来说,从0x00
到 的所有字符0x1F
,除了0x09
(TAB), 0x0A
(new line), 0x0D
(CR)
到目前为止,我只需要替换0x00
字符。因为我以前的操作系统是 AIX(没有 GNU 命令),所以我不能使用sed
(嗯,我可以,但它有一些限制)。因此,我使用 找到了下一个命令perl
,它按预期工作:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Run Code Online (Sandbox Code Playgroud)
现在我在 Linux 上工作,所以我希望能够使用sed
命令。
我的问题:
此命令是否适合替换这些字符?我试过了,它似乎有效,但我想确保:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Run Code Online (Sandbox Code Playgroud)我认为perl -p
作为sed
. 那么,为什么上一个命令有效(至少,它不会失败),而下一个命令无效?
sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Run Code Online (Sandbox Code Playgroud)
它告诉我:
sed:-e 表达式 #1,字符 34:无效的排序规则字符
我制作了一个脚本来做一些数学运算,使用bc
和printf
。
它在cygwin
哪个区域设置下运行良好en_US.UTF-8
,但是当我在 linux 下运行它时,哪个区域设置是en_ES.UTF-8
,它失败了,因为它,
用作十进制分隔符。例如下一个表达式失败:
avg=$(printf %.2f $(echo "scale=4; $val1/$val2" | bc -l ))
Run Code Online (Sandbox Code Playgroud)
我找到了解决方案。在脚本之前LC_ALL=C.UTF8
:
LC_ALL=C.UTF8 ./script.sh [OPTIONS]
Run Code Online (Sandbox Code Playgroud)
但是,我认为最好不要这样做。
所以,我的问题是:有没有办法只在脚本内部更改语言环境,以避免此类问题,而不管用户配置文件中设置的语言环境如何?
是否有任何选项curl
可以将页面保存为文本?
我的意思是,就像一个页面可以在浏览器中保存为Text Files 一样。至少,Firefox 有这个选项。
我需要它作为脚本,我只是做一些类似的事情
curl -s http://...
Run Code Online (Sandbox Code Playgroud)
但是如果没有所有的 html 代码,它会让事情更容易处理。
我找到了一个选项,lynx
可以实现我想要的:lynx -dump
,但我宁愿使用curl
.
谢谢。