小编Alb*_*ert的帖子

替换 perl 和 sed 中不可打印的字符

我需要用文件中的空格替换一些不可打印的字符。

具体来说,从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:无效的排序规则字符

sed perl

12
推荐指数
1
解决办法
3万
查看次数

在脚本中更改语言环境

我制作了一个脚本来做一些数学运算,使用bcprintf

它在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)

但是,我认为最好不要这样做。
所以,我的问题是:有没有办法只在脚本内部更改语言环境,以避免此类问题,而不管用户配置文件中设置的语言环境如何?

bash locale

8
推荐指数
1
解决办法
1万
查看次数

以文本形式获取 curl 中的页面

是否有任何选项curl可以将页面保存为文本

我的意思是,就像一个页面可以在浏览器中保存为Text Files 一样。至少,Firefox 有这个选项。

我需要它作为脚本,我只是做一些类似的事情

curl -s http://... 
Run Code Online (Sandbox Code Playgroud)

但是如果没有所有的 html 代码,它会让事情更容易处理。

我找到了一个选项,lynx可以实现我想要的:lynx -dump,但我宁愿使用curl.

谢谢。

lynx curl

4
推荐指数
2
解决办法
7424
查看次数

标签 统计

bash ×1

curl ×1

locale ×1

lynx ×1

perl ×1

sed ×1