次のパスのリストを含むファイルがあります。
"1" "/user/bin/share"
"2" "/home/user/.local"
"3" "/root/"
抽出する方法はありますか?ただ道?数字や引用符は必要ありません。ファイルのパスをsedまたはgrepする方法は?そのような操作にはどの正規表現が必要ですか?
答え1
すべてのパスが次から始まる場合は/
一致させることができます。/
"
$ grep -o '/[^"]*' file
/user/bin/share
/home/user/.local
/root/
または、より構造化されたアプローチのために、次をawk
使用して2番目のフィールドから引用符を削除し、2番目のフィールドのみを印刷します。
awk '{gsub(/"/,"",$2); print $2}' file
答え2
パスに改行文字が含まれていないと仮定すると、
$ sed 's/^.*[[:blank:]]"//; s/"$//' <file
/user/bin/share
/home/user/.local
/root/
コードは、スペース(スペースまたはタブ)の前にある最初の文字をsed
含む各行のすべての項目を削除することから始まります。次に最後の項目を"
削除します。"
これにより、パスにスペースと埋め込み文字を含めることができますが、"
スペースと組み合わせは許可されません"
。
答え3
なぜ簡単ではないのですか?
awk -F\" '{print $4}' file
/user/bin/share
/home/user/.local
/root/
働く?
答え4
簡単な方法。を使用してフィールド#4を削除し、引用符を区切り文字として使用しますcut
。
$ cut -f4 -d\" file
/user/bin/share
/home/user/.local
/root/
$