次の文字列があります。func showFetchNextSliceFailed(result: UserResult<[Product]>) {
これから私は考える1)。 2)のみ抽出しますshowFetchNextSliceFailed
。同様に、与えられた行のすぐ上に挿入します#Mark showFetchNextSliceFailed
。
func showProductsList(result: UserResult<[Product]>) {
}
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
予想出力:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
grepとsedを試しましたが、まだ文字列を抽出して置き換える方法を正しく理解できませんでした。
答え1
そしてsed
- 一致するパターン空間をコピーして省スペース
- パターン空間の変更
- 予約済みスペースから元のコンテンツを復元して追加します。
前任者。
$ sed '/func show/ {h; s/func \(show[^(]*\).*/#Mark \1/; G;}' file
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
答え2
次のファイルがある場合code
:
入力する:
$more code
func showProductsList(result: UserResult<[Product]>) {
}
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
注文する:
perl -i.bak -pe "s/^^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g" code
出力:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
説明する:
-i.bak
perl
入力ファイルをバックアップするための内部モードs/^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g
パターンの検索と置換の詳細は次の場所にあります。デモ