簡體   English   中英

如何使用sed從字符串中的特定點提取文本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM