2016-07-29 38 views
0

我想使用sed將單個字符串分解爲兩個不同的字符串。如何使用sed從字符串中的特定點提取文本?

對於如:

STRING := folder1_test.abc_xxx 

STRING1 := folder1_test 

STRING2 := abc_xxx 

or 

STRING := folderB_test folderA_test.yyyy_xx 

STRING1 := folderB_test folderA_test 

STRING2 := yyyy_xx 

所以,無論是點我希望在第一串和點前後我想在第二個字符串的那個東西()()。

僅限於sed命令。正如我在makefile實現中使用的那樣。

+0

將'切-d.'足夠? – ewcz

+0

你可以更多地指定如何使用cut -d,特別是對於上面的情況,因爲我是linux新手。 –

+0

如果輸入是類似的東西,那麼你的期望輸出是什麼:'STRING:= folderC_test folderD_rd.zzzz_yy folderA_test.yyyy_xx' – sat

回答

0

從你的文章中,我明白,你需要這一個Makefile(和語法確認這一點)。在這種情況下,這是你所需要的:https://stackoverflow.com/a/8540718/3464942

例如:
STRING1 := $(firstword $(subst ., ,$(STRING)))
STRING2 := $(or $(word 2,$(subst ., ,$(STRING))),$(value 2))

+0

謝謝@fara它適用於我。 –

0

一個命令行:

隨着tr CMD:

echo 'folderB_test folderA_test.yyyy_xx' | tr "." "\n" 
# gives folderB_test folderA_test 
#  yyyy_xx 

隨着切口(組定界符和顯示字段1(-f1)):

echo 'folderB_test folderA_test.yyyy_xx' | cut -d. -f1 
# gives folderB_test folderA_test 

隨着切口(將分隔符設置爲。並顯示field2(-f2)):

echo 'folderB_test folderA_test.yyyy_xx' | cut -d. -f2 
# gives yyyy_xx 

結果存入數組和閱讀:

#!/bin/bash 

IN="[email protected];[email protected]" 

#With tr cmd: 
arr=$(echo $IN | tr ";" "\n") 

#With sed cmd: 
arr=$(echo $IN | sed 's/;/\'$'\n/g') 

for x in $arr 
do 
    echo "$x" 
done 

給出:

[email protected] 
[email protected] 
0

使用parameter expansion

$ str='folder1_test.abc_xxx' 
$ echo "${str%.*}" 
folder1_test 
$ echo "${str#*.}" 
abc_xxx 

$ str='folderB_test folderA_test.yyyy_xx' 
$ echo "${str%.*}" 
folderB_test folderA_test 
$ echo "${str#*.}" 
yyyy_xx 

與變量賦值按規定

$ string='folderB_test folderA_test.yyyy_xx' 
$ string1="${string%.*}" 
$ echo "$string1" 
folderB_test folderA_test 
$ string2="${string#*.}" 
$ echo "$string2" 
yyyy_xx 
更換

備註:用戶自定義變量最好使用小寫字母

0

我認爲它會回答你的問題。

sed 's/\(^\(.*\)\.\(.*\)$\)/STRING : \1\nSTRING 1: \2\nSTRING 2: \3/g'

例:

的sed的/(。^()()$)/ STRING:\ 1 \ nSTRING 1:\ 2 \ nSTRING 2:\ 3/G」

folderB_test folderA_test.yyyy_xx //輸入

STRING:folderB_test folderA_test。yyyy_xx

STRING 1:folderB_test folderA_test

STRING 2:yyyy_xx

相關問題