Как мне сделать замену на `$ 0`, но сохранить старое значение?

Это потому, что df показывает информацию только о смонтированных файловых системах. sda1 и sda3 смонтированы, поэтому они показывают правильную информацию.

1
10.04.2017, 00:28
3 ответа
ls | egrep '^m' | awk '{ x=$0; gsub(/^./, ""); $0 = x " " $0 }1' | xargs -l -t mv

Posix- ly реализация осуществляется через параметр -L для xargs как:

ls | egrep '^m' | awk '{ x=$0; gsub(/^./, ""); $0 = x " " $0 }1' | xargs -L 1 -t mv

ls | egrep '^m' | awk '{ x=$0; gsub(/^./, ""); print x, $0 }' | xargs -L 1 -t mv

На основе what Я ответил на ваш предыдущий запрос относительно xargs , мы можем использовать это обучение с пользой в этом примере.

Я немного изменил ваш код awk : он сохраняет исходную строку ( $ 0 ), так как функция gsub затирает ее.Затем мы соединяем старую и новую, чтобы получить строку, которую мы хотим отправить в xargs , который затем вызовет mv с правильными аргументами для выполнения переименования.

2
27.01.2020, 23:11

Это должно обрабатывать всю операцию:

for file in m*; do mv "${file}" "${file#m}"; done

Перед тем, как запустить это, сначала проверьте все с помощью

for file in m*; do echo mv "${file}" "${file#m}"; done

Это использует глобус m * для шагов 1 и 2, затем $ {file # m} (который удаляет «m» из начала $ {file} ) для шага 3 и, наконец, цикл для шага 4.

Чтобы ответьте на свой вопрос AWK, вы можете сделать это следующим образом:

echo mfoo | awk '{ print $0, substr($0, 2) }'

Переменные AWK не используют $ , это только для полей; вот откуда взялась ваша ошибка: AWK понимает $ old как «значение поля, пронумерованное в соответствии со значением old ». Его тоже будет легче читать, если вы поместите свои команды в один блок (при условии, что они имеют один и тот же шаблон). Исправление вашего скрипта дает

echo mfoo | awk '{ old = $0; gsub(/^./, ""); print old, $0 }'
7
27.01.2020, 23:11

Лучшая стратегия - использовать команду переименовать .

Обратите внимание, что точный синтаксис этих команд зависит от дистрибутива, обратитесь к странице man вашей конкретной версии дистрибутива. В Ubuntu, например, в которой есть Perl-реализация переименовать , вы можете использовать регулярное выражение:

rename -nono 's/^m//' m*

Примечание: удалите флаг -nono , чтобы фактически выполнить переименование.

2
27.01.2020, 23:11

Теги

Похожие вопросы