Подтвердить что ты не робот

Замена/с помощью TAB с помощью sed

Мне нужно заменить символ косой черты на вкладку, чтобы я мог извлечь имя каталога с помощью awk.

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

Я пробовал это делать, но все, что он делает, помещает "t" из моего вывода.

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

Любая помощь будет оценена.

4b9b3361

Ответ 1

Во-первых, вы можете использовать другой символ в качестве разделителя s///. Команда

sed 's:ABC:DEF:g'

эквивалентно для

sed 's/ABC/DEF/g'

Это сделает вашу команду более читаемой, потому что вам не придется скрывать косую черту.

Сказано, что некоторые seds не поддерживают escape-последовательность символов, например \t. Это случается со мной много в Mac OS X, например. Мое решение - нажать Control + V, а затем вкладку char:

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

Ответ 2

Попробуйте awk:

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

Ответ 3

Я нашел для меня ответ здесь. У меня MacOSX, поэтому я использовал Control + v, а затем Control + i.

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

Ответ 4

Для замены/с помощью TAB с помощью sed:

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

Как правило, поместите символы '$' перед символами tab (\ t) и новой строки (\n). Работает в bash.

Чтобы извлечь имя каталога:

Лично я бы использовал grok12.

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

Ответ 5

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

Это печатает USEFUL_INFORMATION

Он определяет разделитель полей как /. Обратите внимание, что поскольку ваши строки начинаются с //, первое поле имеет значение null, поэтому количество полей вашего поля будет больше, чем вы могли бы подумать.

Ответ 6

Попробуйте добавить двойную кавычку ("") вместо одиночной кавычки (''), как показано в следующей команде.

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

Обычно мы используем двойные кавычки ("") с sed, когда мы имеем дело со специальными символами.

Как и в вашем случае, вы не избежали символа \ в TAB (\ t).

Ответ 7

Использовать + в качестве разделителей   sed -e 's+/+\t+g

echo 'path/to/something' | sed -e 's+/+\t+g'

// path     to     something

Edit: более простой способ извлечь путь к файлу:

dirname /path/to/file.txt
#output /path/to

Ответ 8

Посмотрите 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

Ответ 9

Сначала, как и другие, используйте другой символ в качестве разделителя. Во-вторых, используйте $'\t' вне цитат. Пример с ; в качестве разделителя:

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