質問に100%一致しないため、タイトルを自由に変更してください
私はこのようなものをファイルに持っています:
junk
long_ass_string "/I/want/this/$code/$name" long_ass_string
junk
例を明確にする:
これまでに試しました...
grep -w "/I/want/this/*" file
#long_ass_stringを出力しますgrep -o "/I/want/this/*" file
#出力/ I/want/this /
前後にx個の余分な文字のみを取得するソリューションの使用を避けたい
私はすべての文字列をgrepで処理し、2番目のgrepで整理します。
grep -o '"[^"]*"' file
出力:
"/I/want/this/$code/$name"
この式/I/want/this/*
は/I/want/this
に一致し、次に0個以上のスラッシュ文字に一致します。おそらく、/I/want/this/.*
は/I/want/this/
および0個以上の文字に一致します。
私がよく理解している場合は、各行の最初の$ code変数と$ name変数を取り除く必要があります。結果をパイプしてそのためにカットできます。あなたの例に従って:
grep "/I/want/this/" myfile.txt | cut -d '/' -f 1-4,7-
-d
を使用して区切り文字(たとえば、記号/
)を定義し、-f
を使用して、取得するフィールドを指定します。
この場合、区切り文字1から4(/I/want/this/
)までと、7番目の区切り文字の後に続くすべてのフィールド(引数7-
で行われます)このように、/$code/$name
は、定義された正規表現に一致するすべての行の4〜7番目の区切り文字です。
echo "/I/want/this/NOT/THAT/and/everythingelse" | grep "/I/want/this/" | cut -d '/' -f 1-4,7-
/I/want/this/and/everythingelse