2014-01-07 191 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} }

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

相關問題