[英]Bash - Sed / Awk replacing string with new line
我有一個帶有如下所示字符串的文件,並希望在“steps:”和“ - ”之間用新行代替everthing:
- name: Change It uid: Change It_TRANS_App - Web type: TRANSACTION steps: 02 - name: Change It 1 type: BSTEP uid: Step 1_STEP_Change It_TRANS_App -strong text Web rules:
我嘗試過使用awk:
echo $string | awk {'gsub(/steps:.*?-/ , 'steps:\n-' )'; print $0}
但是,我收到以下錯誤:
awk: {gsub(/steps:.*?-/ , steps:n- )
awk: ^ syntax error
awk: fatal: 0 is invalid as number of arguments for gsub
我和sed一起嘗試過:
sed -r 's:/\bsteps:\b.*?-/\n/' stringfile.txt > output.txt
並刪除“:”:
sed -r 's/\bsteps.*?-/\n/' stringfile.txt > output.txt
在第一種情況下,我得到錯誤:
sed: -e expression #1, char 28: unterminated `s' command
隨着第二個sed,我刪除了很多其他不應該的東西。
[編輯]正如你們告訴我的那樣,我忘了把預期的輸出,我一直以為這很簡單,但是我不好。 我想要“打破”作為一條新線,在“步驟”之后立即切出這個詞,在這種情況下,將是“02”。 這將是第一次出現“ - ”:
- name: Change It uid: Change It_TRANS_App - Web type: TRANSACTION steps:
- name: Change It 1 type: BSTEP uid: Step 1_STEP_Change It_TRANS_App -strong text Web rules:
你很親密:
awk '{gsub(/steps:.*-/,"steps:\n-");print $0}' <<< "$sting"
- name: Change It uid: Change It_TRANS_App - Web type: TRANSACTION steps:
-strong text Web rules:
可以縮寫為:
awk '{gsub(/steps:.*-/,"steps:\n-")}1' <<< "$sting"
Ref Eds評論:
awk '{gsub(/steps:[^-]*-/,"steps:\n-")}1' t
- name: Change It uid: Change It_TRANS_App - Web type: TRANSACTION steps:
- name: Change It 1 type: BSTEP uid: Step 1_STEP_Change It_TRANS_App -strong text Web rules:
既然sed不支持非貪婪模式*?
,你可以使用一個否定的類字符類。
sed -r 's/\bsteps[^-]*-/\n-/' file
例:
$ sed -r 's/\bsteps[^-]*/\n/' file
- name: Change It uid: Change It_TRANS_App - Web type: TRANSACTION
- name: Change It 1 type: BSTEP uid: Step 1_STEP_Change It_TRANS_App -strong text Web rules:
雖然awk
和sed
專家正在提供解決方案,但我建議考慮使用Perl。
要替換新行,直到第一次出現-
在字符串中:
echo $string | perl -pe 's/(.*steps:).*?(-.*)/$1\n$2/'
- name: Change It uid: Change It_TRANS_App - Web type: TRANSACTION steps:
- name: Change It 1 type: BSTEP uid: Step 1_STEP_Change It_TRANS_App -strong text Web rules:
要替換新行,直到最后一次出現-
在字符串中:
echo $string | perl -pe 's/(.*steps:).*(-.*)/$1\n$2/'
- name: Change It uid: Change It_TRANS_App - Web type: TRANSACTION steps:
-strong text Web rules:
括號內的兩個表達式在替換表達式的后半部分被稱為$ 1和$ 2。 然后?
在中間部分規定.*
是貪婪還是不貪婪。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.