次のファイル:
Lorem ipsum dolor sit amet、consectetuer adipiscing elit。Ut eu metus id lectus vestibulum ultrices。Maecenas rhoncus。
前consectetuerとすべてを削除したいelit。
私の希望する出力:
consectetuer adipiscing elit.
これどうやってするの?
次のファイル:
Lorem ipsum dolor sit amet、consectetuer adipiscing elit。Ut eu metus id lectus vestibulum ultrices。Maecenas rhoncus。
前consectetuerとすべてを削除したいelit。
私の希望する出力:
consectetuer adipiscing elit.
これどうやってするの?
回答:
sedを使用します
sed 's/^.*\(consectetuer.*elit\).*$/\1/' file
sed s / find / replace /構文をデコードしました:
s/^.*-行の先頭から始まる置換(^)に続く任意の(.*)...\( -名前付きブロックを開始するconsectetuer.*elit\.-最初の単語、.*最後の単語(この場合、末尾の(エスケープされた)ドットを含む)までのすべてを一致させます\) -指定されたブロックを終了する.*(行末までを)$)/ -代替検索セクションの終了\1-間の名前のブロックと交換\(し、\)上記/ -交換を終了する^か、$sedのため、試してみて、最長一致を検索します。また、の後のドットを見逃している可能性があります。必要に応じてelit挿入できます\.。
^で$はないことを修正します-質問者が(元々)彼は少し初心者であり、これは他の文脈で役立つかもしれないと指摘したように、私はそれらをそこに残しました。
AWKの2つのforループ:
$ awk '{for(i=1;i<=NF;i++) {if ($i == "consectetuer") beginning=i; if($i== "elit.") ending=i }; for (j=beginning;j<=ending;j++) printf $j" ";printf "\n" }' file.txt
consectetuer adipiscing elit.
AWKのgsub:
$ awk '{gsub(/^.*consectetuer/,"consectetuer"); gsub(/elit.*$/,"elit.");print}' file.txt
consectetuer adipiscing elit.
Perlの方法。これは、MikeVのsed答えと本質的に同じです。
perl -pe 's/.*(consectetuer.*elit).*./$1/' file
-pは、「指定されたスクリプトを適用した後にすべての行を印刷する」という意味-eです。s/foo/bar/置換演算子です。に置き換えfooられbarます。カッコはパターンをキャプチャし、置換に使用します。最初にキャプチャされたパターンは$1、2番目$2などです。
そのため、コマンドはconsectetuer(.*consectetuer)まですべてを照合し、次に()まですべてを照合し、次に行の最後までelit(.*elit)を照合.*して、キャプチャしたパターンに置き換えます。
この質問のタイトルが「ファイルから」から「行から」に編集された理由はわかりませんが、OPは例が1行のみのように見えても、複数行にわたる可能性を除外しません。いずれにせよ、ここで複数行のソリューションを提供すると役立つ場合があります。
これはクロスラインで機能します:
from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
例:
[xiaobai@xiaobai tmp]$ cat file
1
abc consectetuer lsl
home
def elit dd
2 consectetuer ABC elit
[xiaobai@xiaobai tmp]$ from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
consectetuer lsl
home
def elit
[xiaobai@xiaobai tmp]$
参照:シェルパラメーターの展開
sedです。perlまたは、純粋なbash にすることもできます。