Это некрасиво, но работает
cat my_data | sed -e 's/./ &/g' -e 's/^ \(.\) \(.\) \(.\) \(.\) /\1\2\3\4/'
В первом выражении перед всеми буквами ставится пробел. Следующая удаляет пробелы из первой части.
Вы также можете создать сценарий:
#! /bin/bash
while read ID NUMBERS; do
echo $ID$(echo $NUMBERS | sed -e 's/./ &/g')
done
и затем запустить
cat my_data | ./my_script
В зависимости от того, как настроена ваша команда pwd
, она может по умолчанию показывать логический рабочий каталог (вывод by pwd -L
), который покажет расположение символической ссылки, или физический рабочий каталог (вывод pwd -P
), который игнорирует символическую ссылку и показывает " реальный "каталог".
Для полной информации вы можете сделать
file "$(pwd -L)"
Внутри символической ссылки будет возвращено
/path/of/symlink: symbolic link to /path/of/real/directory
Обратите внимание, что pwd
на самом деле является встроенной оболочкой. В зависимости от вашей оболочки и ее конфигурации результаты могут измениться. Для более портативного решения следует использовать /bin/pwd
. Фрагмент из страницы руководства:
NAME
pwd - print name of current/working directory
SYNOPSIS
pwd [OPTION]...
DESCRIPTION
Print the full filename of the current working directory.
-L, --logical
use PWD from environment, even if it contains symlinks
-P, --physical
avoid all symlinks
--help display this help and exit
--version
output version information and exit
If no option is specified, -P is assumed.
NOTE: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for
details about the options it supports.
В общем, вы можете определить полный канонический путь к любому файлу/каталогу, используя readlink -f
. readlink -f .
работает аналогично pwd -P
.
По сути, вы спрашиваете, есть ли возможность показать фактический путь к текущей рабочей директории. Ну, есть, с помощью python и функции os.getcwd()
То, что вы видите ниже, это небольшой тест из каталога "VirtualBox VMs", расположенного в моей домашней директории. На самом деле это симлинк на другой каталог, расположенный на другом жестком диске, смонтированном по адресу /mnt/HDD
.
bash-4.3$ file "$(pwd)"
/home/xieerqi/VirtualBox VMs: symbolic link to /mnt/HDD/VirtualBox VMs/
bash-4.3$ python -c 'import os; print os.getcwd()'
/mnt/HDD/VirtualBox VMs
Как видите, python os.getcwd()
разрешает реальный путь к директории, а не путь симлинка.
Вы действительно находитесь в / home / cpm135 / public_html / class
- это единственный правильный ответ на вопрос «какой у меня текущий рабочий каталог».
Когда вы ссылаетесь на / var / lib / class
... это не совсем о том, где вы находитесь, а о , какой путь вы использовали, чтобы попасть туда .
Когда вы запускаете / bin / pwd
, он определяет ваш текущий рабочий каталог, глядя на файл. и .. каталоги (перечисленные в верхней части ls -la
), определяя, какой каталог в .. совпадает с. а затем работать в обратном направлении, пока .. и. относятся к тому же каталогу. Как только это будет сделано, он узнает, какой у вас текущий рабочий каталог.
Когда вы запускаете встроенную оболочку pwd
, она не следует этой процедуре (хотя при необходимости может и делать некоторые из них) - вместо этого она запоминает путь, который вы выбрали для получения здесь. Таким образом, каждый раз, когда вы выполняете команду cd
, ваша оболочка запоминает это как часть пути к тому, где вы находитесь сейчас, а pwd
выводит то, что он вычислил на основе всех cd
команды, которые вы выполнили, которые могут быть, а могут и не быть вашим фактическим рабочим каталогом.
Все может стать действительно странным, когда вы выполняете ln -s. foo
и сохраните cd
в foo - / bin / pwd
скажет, что вы все еще находитесь в том же каталоге, но встроенная оболочка pwd
скажет, что вы находитесь в / foo / foo / foo / foo / foo / foo
- даже если такой каталог на самом деле не существует.(Тем не менее, вы, вероятно, можете добавить в него cd
.)
Другой источник путаницы возникает, если каталоги переименовываются. / bin / pwd
сразу же заметит изменение, но встроенный pwd
не будет, пока вы не сделаете что-то, что говорит ему, что старое имя каталога не имеет значения. .