Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
使用sed删除bash中的空白_Bash_Unix_Sed_Whitespace_Uniq - Fatal编程技术网

使用sed删除bash中的空白

使用sed删除bash中的空白,bash,unix,sed,whitespace,uniq,Bash,Unix,Sed,Whitespace,Uniq,我有一个文件,它包含一个数字,后面的每一行都有一个文件路径,用于存放大量文件。看起来是这样的: 7653 /home/usr123/file123456 但问题是在它前面有6个空白,这就把我的脚本的其余部分抛了出去。我已将产生它的生产线包括在下面: cat temp | uniq -c | sed 's/ */ /g' > temp2 我已经把它缩小为产生不必要的空白的uniq命令。我试图实现一个sed命令来删除空白,但出于某种原因,它删除了除一个以外的所有内容。如何修改

我有一个文件,它包含一个数字,后面的每一行都有一个文件路径,用于存放大量文件。看起来是这样的:

      7653 /home/usr123/file123456
但问题是在它前面有6个空白,这就把我的脚本的其余部分抛了出去。我已将产生它的生产线包括在下面:

cat temp | uniq -c | sed 's/  */ /g' > temp2

我已经把它缩小为产生不必要的空白的
uniq
命令。我试图实现一个
sed
命令来删除空白,但出于某种原因,它删除了除一个以外的所有内容。如何修改我的
sed
语句或
uniq
语句以消除这些空白?任何帮助都将不胜感激

要删除所有前导空白,请使用:

sed 's/^ *//g'
要删除任何类型的所有前导空白,请执行以下操作:

sed 's/^[[:space:]]*//g'

^
符号仅在行首匹配。因此,上面的内容将不在行首留下任何空白。

分解当前sed模式的/////g': 搜索模式“*”匹配单个空格,后跟零个或多个空格。替换模式“”是单个空格。结果是找到一个或多个空间的任何集合,并将其替换为单个空间,从而除去除一个以外的所有空间。要使其全部删除,只需将替换模式设置为空字符串“”:sed's/*//g'

但是,请注意,“g”使其成为全局的,因此这也将删除数字和文件路径之间的空格。如果你只想去掉前导空格,你可以去掉g。您还可以使用+量词,表示“至少一个”,而不是*,表示“至少零个”。 这将给您留下:sed's/\+/'


ETA:正如John1024所指出的,您还可以使用“^anchor”指定行的开头,使用\s通配符指定任何空格字符,而不仅仅是空格:sed's/\s\+/'

注意\s字符类速记是GNU扩展。John1024的[[:space:]与POSIX兼容。我在行尾的空白处遇到了类似的问题。sed的//*$//g'将其删除。哦,太好了
sed的//^[:space:][]*//g'
真是天赐良机。