Awkを使用してディレクトリ名を抽出するには、スラッシュ文字をタブに置き換える必要があります。
/path/to/some/USEFUL_INFORMATION/in/some/path
私はこれを試してみましたが、それは私の出力のfromに「t」を置くだけです。
sed -e 's/\//\t/g' filename
任意の助けいただければ幸いです。
最初に、s///
区切り文字として別の文字を使用できます。コマンド
sed 's:ABC:DEF:g'
同等です
sed 's/ABC/DEF/g'
スラッシュをエスケープする必要がないため、コマンドが読みやすくなります。
とはいえ、一部のsedは\t
などの文字エスケープをサポートしていません。たとえば、Mac OS Xではよく起こります。私の解決策は、Ctrl + Vを押してからタブ文字を押すことです。
sed 's:/:<Control+V><TAB character>:g'
私のマシンでの結果は:
$ pwd
/Users/brandizzi/sandbox/demo/mydemo
$ pwd | sed 's:/: :g'
Users brandizzi sandbox demo mydemo
ただし、すべてのパスディレクトリをawk変数$1
、$2
などに配置する場合は、スラッシュをawk -F
フラグを使用してフィールド区切り文字として宣言するだけです。
$ pwd
/Users/brandizzi/sandbox/demo/mydemo
$ pwd | awk -F / '{print $3 " " $5}'
brandizzi demo
awk
を試してください:
awk '{gsub("/","\t",$0); print;}' filename
答えを見つけました、私にとっては here 。 MacOSXを持っているので、Control + vの後にControl + iを使用しました。
sed -e 's/\/[CTR+V][CTR+I]/g' filename
sedを使用して/をTABに置き換える場合:
sed 's/\//\'$'\t/g' filename.txt
一般に、タブ(\ t)および改行(\ n)文字の前に\ '$'を配置します。 bashで動作します。
ディレクトリ名を抽出するには:
個人的には、grok12の答えを使用します。
awk -F'/' '{print $5}' filename.txt
awk -F '/' '{print $ 5}' your_file
これはUSEFUL_INFORMATIONを出力します
フィールド区切り文字を/と定義します。文字列は/で始まるため、最初のフィールドはnullであるため、フィールド数は予想よりも1つ多くなります。
次のコマンドに示すように、単一のquote( '')ではなく、二重のquote( "")を使用してください。
sed -i "s/\//\\t/g" filename
通常、特殊文字を扱う場合は、二重引用符( "")をsedとともに使用します。
あなたの場合のように、タブ文字(\ t)で\をエスケープしていません。
別のオプションは `printf "\t"`
sed
内:
sh -c 'echo test1 test2 | sed -E "s#(.*) (.*)#\2`printf "\t"`\1#g"'
出力は次のとおりです。
test2 test1
これはあなた自身の例でそれが機能することを示すためです:
sh -c 'echo /path/to/some/USEFUL_INFORMATION/in/some/path | sed "s#/#`printf "\t"`#g"'
出力:
path to some USEFUL_INFORMATION in some path
最初に他の人が示唆したように、区切り文字として別の文字を使用します。次に、引用符の$'\t'
outsideを使用します。区切り文字として;
を使用した例:
$ echo "/path/to/some/USEFUL_INFORMATION/in/some/path" | sed -e 's;/;'$'\t'';g'
path to some USEFUL_INFORMATION in some path
dirname
とbasename
をご覧ください
$ dirname /path/to/some/USEFUL_INFORMATION/in/some/path
/path/to/some/USEFUL_INFORMATION/in/some
$ basename /path/to/some/USEFUL_INFORMATION/in/some/path
path
awkは、任意のセパレータを処理できます。 /
:
$ echo /path/to/some/USEFUL_INFORMATION/in/some/path | awk -F"/" '{print $5}'
USEFUL_INFORMATION
+を区切り文字として使用するsed -e 's+/+\t+g
'
echo 'path/to/something' | sed -e 's+/+\t+g'
// path to something
編集:ファイルのパスを抽出する簡単な方法:
dirname /path/to/file.txt
#output /path/to