[英]How to extract text from a particular point in string using 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實現中使用的那樣。
使用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="bla@some.com;john@home.com"
#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
給出:
bla@some.com
john@home.com
從您的帖子中,我了解到您需要在Makefile中使用它(語法正在確認這一點)。 在這種情況下,這就是您需要的: https : //stackoverflow.com/a/8540718/3464942
例如:
STRING1 := $(firstword $(subst ., ,$(STRING)))
STRING2 := $(or $(word 2,$(subst ., ,$(STRING))),$(value 2))
使用參數擴展
$ 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
根據要求用變量分配替換echo
$ string='folderB_test folderA_test.yyyy_xx'
$ string1="${string%.*}"
$ echo "$string1"
folderB_test folderA_test
$ string2="${string#*.}"
$ echo "$string2"
yyyy_xx
注意:對於用戶定義的變量,最好使用小寫字母
我認為它將回答您的問題。
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文件夾A_test.yyyy_xx
STRING 1:folderB_test文件夾A_test
STRING 2:yyyy_xx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.