[英]Combine multiple sed commands into one
我有一個文件example.txt
,我想刪除並替換其中的字段。
下面的命令很好,但是以一種非常混亂的方式,不幸的是我是sed
命令的菜鳥。
我使用的命令:
sed 's/\-I\.\.\/\.\.\/\.\.//\n/g' example.txt > example.txt1
sed 's/\-I/\n/g' example.txt1 > example.txt2
sed '/^[[:space:]]*$/d' > example.txt2 example.txt3
sed 's/\.\.\/\.\.\/\.\.//g' > example.txt3 example.txt
然后我刪除所有不必要的文件。
我正在嘗試獲得以下結果:
Common/Components/Component
Common/Components/Component1
Common/Components/Component2
Common/Components/Component3
Common/Components/Component4
Common/Components/Component5
Common/Components/Component6
Comp
App
該文件如下所示:
-I../../../Common/Component -I../../../Common/Component1 -I../../../Common/Component2 -I../../../Common/Component3 -I../../../Common/Component4 -I../../../Common/Component5 -I../../../Common/Component6 -IComp -IApp ../../../
我想知道如何通過sed
工具或awk
1 次調用將輸入格式轉換為 output 格式標准文本處理工具的最佳方法。
關於什么
sed -i 's/\-I\.\.\/\.\.\/\.\.//\n/g
s/\-I/\n/g
/^[[:space:]]*$/d
s/\.\.\/\.\.\/\.\.//g' example.txt
如果是將其存儲到變量中,您可以執行以下操作:
#!/bin/bash
includes=' -I../../../Common/Component -I../../../Common/Component1 -I../../../Common/Component2 -I../../../Common/Component3 -I../../../Common/Component4 -I../../../Common/Component5 -I../../../Common/Component6 -IComp -IApp ../../../ '
extracts=$(
sed -nE 's/ *-I(\.\.\/)*([^ ]*) +([^ -][^ ]*)?/\2\'$'\n''/pg'
)
最后有一個不需要的換行符,通過使用$()
被剝離。
使用
sed<\/code>
$ sed 's|\([A-Z][^/]*/\)\([A-Z][^0-9 ]*\)|\1\2s/\2|g;s/-I/\n/g;s/\.[^[:alnum:]]*//g' input_file
Common/Components/Component
Common/Components/Component1
Common/Components/Component2
Common/Components/Component3
Common/Components/Component4
Common/Components/Component5
Common/Components/Component6
Comp
App
如果您真的不希望將字符串
\/Components<\/code>添加到某些輸出行的中間,那么這可能就是您想要的,在每個 Unix 機器上的任何 shell 中使用任何 awk:
$ awk -v RS=' ' 'sub("^-I[./]*","")' file
Common/Component
Common/Component1
Common/Component2
Common/Component3
Common/Component4
Common/Component5
Common/Component6
Comp
App
使用您顯示的示例,請嘗試以下
awk<\/code>代碼。
用 GNU
awk<\/code>編寫和測試。
awk -v RS='-I\\S+' 'RT{sub(/^-I.*Common\//,"Common/Components/",RT);sub(/^-I/,"",RT);print RT}' Input_file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.