
aaaaaa"bbbbb"aaaa
出力したいテキストがあります。bbbbb
私はこれを試しましたが、文字だけを切り捨てsed -e 's/"\(.*\)"/\1/'
ます。"
これを正しくフィルタリングするにはどうすればよいですか?
答え1
簡単に作業してくださいcut
。
テキストが標準入力から来る場合:
echo 'aaaaaa"bbbbb"aaaa' | cut -d\" -f2
テキストが次の名前のファイルにある場合filename
:
cut -d\" -f2 filename
コマンドの説明cut
:
-d\"
cut
区切り文字が"
(\
isはエスケープに使用されます。そうでない場合は、シェルが閉じていない引用符について文句を言います)と教えてください。-f2
cut
2番目のフィールドを取得するように指示します("
上記で区切られています)。
答え2
sed
ただコマンドの「右」にある内容を出力するだけではありませんs
。これは、左の一致を右の項目に置き換え、結果行(またはより技術的にはパターン空間)を出力します。
echo 'aa"bb"aa'|sed 's/"\(.*\)"/\1/'
正規表現の左側はと一致します"bb"
。これは、キャプチャグループでキャプチャしたアイテムに置き換えられますbb
。したがって、出力はaabbaa
。
上記の内容は次のとおりです。
echo 'aa"bb"aa'|sed 's/.*"\(.*\)".*/\1/'
この正規表現は行全体と一致するため、にaa"bb"aa
置き換えられます。bb
これが出力です。
別の可能なツールは次のとおりですawk
。
echo 'aa"bb"aa'|awk -F '"' '{print $2}'
これは"
区切り文字として使用され、2番目のフィールドを印刷します。
答え3
ソリューションが必要な場合は、sed
次のようなソリューションがありますtr
。
echo 'aaaaaa"bbbbb"aaaa' | tr '"' '\n' | sed -n 2p
または以下を使用してくださいawk
。
echo 'aaaaaa"bbbbb"aaaa' | awk -F'"' '{print $2}'
(私はまだを好むcut
。参照してください。@GMasterからの返信)。
答え4
grep
回避策(プレビューを使用するためPCREオプション):
grep -oP '(?<=")[^"]*(?=")'