web-dev-qa-db-ja.com

sedを使用した/とTABの置換

Awkを使用してディレクトリ名を抽出するには、スラッシュ文字をタブに置き換える必要があります。

/path/to/some/USEFUL_INFORMATION/in/some/path

私はこれを試してみましたが、それは私の出力のfromに「t」を置くだけです。

sed -e 's/\//\t/g' filename

任意の助けいただければ幸いです。

25
Lance Übercut

最初に、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
32
brandizzi

awkを試してください:

awk  '{gsub("/","\t",$0); print;}' filename
17
ssapkota

答えを見つけました、私にとっては here 。 MacOSXを持っているので、Control + vの後にControl + iを使用しました。

sed -e 's/\/[CTR+V][CTR+I]/g' filename
5

sedを使用して/をTABに置き換える場合

sed 's/\//\'$'\t/g' filename.txt

一般に、タブ(\ t)および改行(\ n)文字の前に\ '$'を配置します。 bashで動作します。

ディレクトリ名を抽出するには:

個人的には、grok12の答えを使用します。

awk -F'/' '{print $5}' filename.txt
4
quietjen

awk -F '/' '{print $ 5}' your_file

これはUSEFUL_INFORMATIONを出力します

フィールド区切り文字を/と定義します。文字列は/で始まるため、最初のフィールドはnullであるため、フィールド数は予想よりも1つ多くなります。

1
grok12

次のコマンドに示すように、単一のquote( '')ではなく、二重のquote( "")を使用してください。

sed -i "s/\//\\t/g" filename

通常、特殊文字を扱う場合は、二重引用符( "")をsedとともに使用します。

あなたの場合のように、タブ文字(\ t)で\をエスケープしていません。

1
Ajit K'sagar

別のオプションは `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
0
cnst

最初に他の人が示唆したように、区切り文字として別​​の文字を使用します。次に、引用符の$'\t'outsideを使用します。区切り文字として;を使用した例:

$ echo "/path/to/some/USEFUL_INFORMATION/in/some/path" | sed -e 's;/;'$'\t'';g'
path    to  some    USEFUL_INFORMATION  in  some    path
0
woodengod

dirnamebasenameをご覧ください

$ 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
0
Fredrik Pihl

+を区切り文字として使用する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
0
Eric Fortis