以下を印刷するLinuxコマンドがあります。
folder/subfolder1/file1.txt
folder/subfolder2/file1.txt
folder/subfolder2/file2.txt
folder/subfolder3/sub-subfolder3/file1.txt
私の目標は、sed
次の結果を印刷することです。
folder/subfolder1
folder/subfolder2
folder/subfolder2
folder/subfolder3
ただし、既定のフォルダと直接サブフォルダだけを保持することはできず、ファイル名のみを削除できます。
's/\(folder\/.*\)\(\/.*\)/\1/'
,印刷
folder/subfolder1
folder/subfolder2
folder/subfolder2
folder/subfolder3/sub-subfolder3
答え1
IIUC、.より深いパスだけを印刷しようとしていますsubfolder
。この場合、以下を使用できますcut
。
your_command | cut -d/ -f1-2
またはawk
:
your_command | awk -v FS='/' '{print $1 "/" $2}'
答え2
次のゲーム.*
folder\/
貪欲に/
、2番目のキャプチャグループに一致する最後の項目のみを残します。
代わりに、次[^/]*
を使用して、すべてを次の区切り文字と一致させることができます。
sed 's/\(folder\/[^/]*\)\(\/.*\)/\1/'
または(実際には2番目のセットを使用しないため)
sed 's/\(folder\/[^/]*\)\/.*/\1/'
答え3
GNU sedを使用すると、次のことができます。
your_command | sed -n 's|/|\n|2g;P'
または、POSIX sed エディタを使用して必要なデータを印刷する場合。すべてのスラッシュを改行文字に変換し、最初のスラッシュを復元して最初の改行文字として印刷します。
your,_command |
sed -n '
y/\//\n/
s|\n|/|;P
'