2014-01-07 193 views
1

我无法将空格分隔的文本文件加载到表中。该文本文件中的数据由teragen生成,因此,仅仅是哑数据,其中只有2列,并且第一列包含随机特殊字符串的值。如何使用sed用空字符串替换第一个空格

例子:

~~~{ZRGHS|

~~~{qahVN)

我遇到一个问题,并得到拒绝的行,因为有些值在他们的空间随机ASCII字符,这会导致它认为有3列,当我的桌子有2个,所以他们被拒绝。

所以,我想要做的只是从这些被拒绝的行中删除第一个空间,这将需要在每一行重复多次,然后尝试重新加载它们。 sed应该是最好的方式去做这件事,还是像tr这样的其他更合适?

谢谢!

+0

sed会完成这项工作,但许多工具都可以做到。用你最喜欢的那个去做吧。 – Wrikken

回答

2

要从行删除第一个空间,使用

echo "my line with spaces" | sed 's/ //' 

根据你的方法(固定列长度是多少?你是如何将这些数据?)的具体情况有可能是一个更好的方式来做到这一点只需一步,而不是一遍又一遍地解析被拒绝的行。

+0

我正在使用复制命令加载数据,并指定一个分析器或分隔符,它是一个空格,''。它的工作,除了被拒绝的行,这是全部放入一个文件。 – user2432819

5

从我的理解,你想删除除了最后两个的所有空间。

  • 你可以建立一个正则表达式为,或者你可以使用的事实,这是很容易保持前n出现:

    $ echo 'one two three four' | rev | sed 's/ //2g' | rev 
    onetwothree four 
    

    ,或者用一个文件:

    rev myfile | sed 's/ //2g' | rev 
    
  • 或者您可以删除一个空间,直到只剩下一个空格:

    $ echo 'one two three four' | sed ':a;/ .* /{s/ //;ba}' 
    onetwothree four 
    

    与文件:

    sed ':a;/ .* /{s/ //;ba}' myfile 
    
  • 或者,如果你的心情的时候,你可以分割线,用它玩,和组装回来(GNU Sed则假设):

    $ echo 'one two three four' | sed -r 's/(.*)([^ ]+) ([^ ]+)$/\1\n\2 \3/;h;s/\n.*//;s/ //g;G;s/\n.*\n//' 
    onetwothree four 
    

    与文件:

    sed -r 's/(.*)([^ ]+) ([^ ]+)$/\1\n\2 \3/;h;s/\n.*//;s/ //g;G;s/\n.*\n//' myfile 
    
+0

是的,这是我想要做的,但是对于每一行,所以这将需要重复多次,其中每行由\ n分隔 – user2432819

+0

@ user2432819这就是'sed'的工作原理,只需给它一个文件名并将该命令应用于每一行。 –

+0

没问题,所以如果我想在一个文件上使用这个命令,会sed -i | rev | sed | '/ // 2g'| rev file.txt的工作? – user2432819

0

要去除/从字符串中删除第一字符:

function stringStripStart { echo ${1:1:${#1}} }

类似于除去traling字符:

function stringStripEnd { FINAL_LEN=${#1}-1 echo ${1:0:$FINAL_LEN} }

注:为空字符串,一些附加条件需要添加。

相关问题