簡體   English   中英

將多個 sed 命令合並為一個

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

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