2013-05-31 53 views
0

我有一個假脫機文件創建的文件。該文件的列由分隔符分隔:#@; 有沒有辦法找到分隔符之間的數據?我的意思是例如:查找下一個分隔符ksh

#@;Hello #@;World #@;!!! 

我必須找到你好,那麼世界然後!!!我試過這種方式,但不起作用:

tp=${ENDFL##*@#} 
      HELLOSTRING=`printf '"%s"\n' "${tp%%#@;*}"` 

任何想法?感謝

+0

你可以使用'awk'和'-F'選項並打印適當的價值與'$ 1'等 - 但你最終要怎麼處理這些數據呢? – fge

+0

類似'awk -F'「#@;」''{print $ 1}''?但是插入。 –

+1

那寧願成爲'awk -F'#@;''。什麼「插入」? – fge

回答

1

使用翻譯命令:

echo "#@;Hello #@;World #@;!!!" | tr '#@;' '^' | tr -s '^' 

輸出:

Kaizen ~ 
$ echo "#@;Hello #@;World #@;!!!" | tr '#@;' '^' | tr -s '^' 
    ^Hello ^World ^!!! 

說明:

第一TR取代了 '#@;'用^分隔符,但是它會執行三次。

「#,@,;」是三個獨立的文字,因此它分別針對所有三個^

第二個tr抑制多重^發生。

因此,您得到一個^分隔的輸出爲「^ Hello^World^!!!」

對於你的文件只是貓的文件名然後管它到翻譯命令之後,你可以使用AWK,剪切或任何格式化或提取,根據你的需要。

0

如果你要處理一堆線

sed -e 's/#@;//g' input.dat 

的要找到分離器之間的數據(假設你有一個變量的值由tp=的建議)

echo "${tp/#@;/}" 

如果你想使用零件

origIFS=$IFS  # always kep the original $IFS save 
IFS='§'   # define a InputFieldSeparator which will not be used in your input 
set ${tp//#@;/$IFS} # reduce separator to one char and set $1 ... based on that separator 
IFS=$origIFS  # and restore $IFS when you are done 
echo "'$1' '$2' '$3' '$4'" # note that $1 is empty, it is before the first separator)