sed コマンドを使用して、親フォルダと直接サブフォルダを一致させます。

sed コマンドを使用して、親フォルダと直接サブフォルダを一致させます。

以下を印刷する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
' 

関連情報