区切り文字に次の文字列があるとします?
。
Leslie Cheung April 1 ? Elvis August 16 ? Leonard Nimoy February 27
grep
文字間の最初の部分文字列を区切る方法を知っています。
echo $above_string | grep -oP "^[^?]*"
Leslie Cheung April 1
2番目または3番目の部分文字列をgrepするには、正規表現をどのように変更する必要がありますか?
答え1
せん断を使うのはどうですか? 2番目のパターンを印刷するには
echo "$above_string" | cut -f2 -d "?"
2列目以降
echo "$above_string" | cut -f2- -d "?"
答え2
echo $above_string | grep -oP "^([^?]*\?){2}\K[^?]*"
n番目の文字列を取得するには、値を2
変更します。n - 1
これはn番目の文字列が必要であると仮定します。その行に。リテラル "?"(perl正規表現の特殊文字であるため)?
で終わらないn - 1個の文字列があります。\?
次に、\K
前のコンテンツに興味がないと宣言するので、次の区切り文字まで次のテキストのみを抽出します。
答え3
awkを使用して、改行で区切られた2番目と3番目のレコードを印刷します。
awk -F"?" '{printf "%s\n%s\n", $2,$3}'
Elvis August 16
Leonard Nimoy February 27
レコードを置き換えるには変数に設定できます。
awk -v record=2 -F"?" '{print $record}'
Elvis August 16
答え4
sed
これを達成するためにsedを使用できますが、お勧めできません。たとえば、次は、数量子を使用して必須フィールドを選択する最初からのソリューションです。
n=1
sed 's/\([^?]*? *\)\{'$n'\}//; s/?.*//' <<<"$above_string"
出力:
Elvis August 16