Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 从变量中修剪垃圾字符_Unix_Shell - Fatal编程技术网

Unix 从变量中修剪垃圾字符

Unix 从变量中修剪垃圾字符,unix,shell,Unix,Shell,我的shell脚本中有一个变量,它按照我的期望工作。 但是当我使用这个变量作为文件名时,我得到??在字符串的开头。如何修剪垃圾角色 我使用$(some命令)创建此变量。有多种方法可以修复变量,但首先我们需要知道要删除什么(即,some命令的输出) 例如,如果它总是在前面放两个你不需要的字符,你可以使用: x=$(someCommand | cut -c3-) x=$(someCommand | tr -d '[\000-\037\177]') 如果要去除输出中0x20到0x7e范围之外的所有

我的shell脚本中有一个变量,它按照我的期望工作。 但是当我使用这个变量作为文件名时,我得到??在字符串的开头。如何修剪垃圾角色


我使用$(some命令)创建此变量。

有多种方法可以修复变量,但首先我们需要知道要删除什么(即,
some命令的输出)

例如,如果它总是在前面放两个你不需要的字符,你可以使用:

x=$(someCommand | cut -c3-)
x=$(someCommand | tr -d '[\000-\037\177]')
如果要去除输出中0x20到0x7e范围之外的所有字符(ASCII
中的不可打印字符),可以使用:

x=$(someCommand | cut -c3-)
x=$(someCommand | tr -d '[\000-\037\177]')
理想情况下,您可以运行
someCommand | od-xcb
来获得它输出的实际十六进制转储。然后我们可以进一步帮助你

更新:


根据您的新数据(输出为
\n\nSomeName27-Oct-2009-14-33.sql.zip
),您应该能够使用
sed'/^$/d'
删除空行

pax> echo '

SomeName27-Oct-2009-14-33.sql.zip' | od -xcb

0000000 0a0a 6f53 656d 614e 656d 3732 4f2d 7463
         \n  \n   S   o   m   e   N   a   m   e   2   7   -   O   c   t
        012 012 123 157 155 145 116 141 155 145 062 067 055 117 143 164
0000020 322d 3030 2d39 3431 332d 2e33 7173 2e6c
          -   2   0   0   9   -   1   4   -   3   3   .   s   q   l   .
        055 062 060 060 071 055 061 064 055 063 063 056 163 161 154 056
0000040 697a 0a70
          z   i   p  \n
        172 151 160 012
0000044

pax> echo '

SomeName27-Oct-2009-14-33.sql.zip' | sed '/^$/d' | od -xcb

0000000 6f53 656d 614e 656d 3732 4f2d 7463 322d
          S   o   m   e   N   a   m   e   2   7   -   O   c   t   -   2
        123 157 155 145 116 141 155 145 062 067 055 117 143 164 055 062
0000020 3030 2d39 3431 332d 2e33 7173 2e6c 697a
          0   0   9   -   1   4   -   3   3   .   s   q   l   .   z   i
        060 060 071 055 061 064 055 063 063 056 163 161 154 056 172 151
0000040 0a70
          p  \n
        160 012
0000042

这是假设那些
\n
标记实际上是两个换行符(
{'\n','\n'}
)。如果(出于某些奇怪的原因)它们是四个字符
{'\\'、'n'、'\\'、'n'}
,请使用
cut-c5-

我建议的一种简单方法是使用带有-d选项的tr命令来删除



filename=
$filename | tr-d'?'
filename=
echo$filename | sed's/\?//g

\n\n用户名27-Oct-2009-14-33.sql.zip#我想删除前两行字符。sed'/^$/d'#谢谢。我还有一个问题。我如何删除两个单词之间的空格?一些名称27-Oct-2009-14-33.sql.zipUse“sed's///g'”,以删除所有空格(即前两个“/”字符之间的空格,以防不明显)。您可以将其与其他sed结合起来,如下所示:“sed-e'/^$/d'-e's///g'”。