Оперативное редактирование с помощью sed на AIX

Существует несколько способов сделать это с находкой.

find . -iname 'test*' -type f -exec ls -i {} \;

find : команда находки
. : каталог для поиска
-iname 'test*' : ищите что-либо, что соответствует тесту* независимо от случая
-type f : только ищите файлы
-exec ls -i {} \; : выполните ls-i на каждом найденном файле

find . -iname 'test*' -type f -printf '%i %f\n'

find : команда находки
. : каталог для поиска
-iname 'test*' : ищите что-либо, что соответствует тесту* независимо от случая
-type f : только ищите файлы
-printf '%i %f\n' - распечатайте inode, затем имя файла только (никакие каталоги), и разделите каждый файл новой строкой

Примечания:

  • Замена -iname для -name если Вы хотите быть чувствительными к регистру.
  • Замена . с полным путем, если Вы хотите искать что-нибудь кроме текущего рабочего каталога.
  • Замена %f с %p для имени файла, включая путь (отличается, используете ли Вы относительные или полные пути в своей команде находки).
  • Если требуется быть выборочными в каталогах, не забывайте параметры -prune и -depth
  • Можно быть более конкретными со строкой и сделать что-то как 'test[0-9]' найти все test0-test9, или 'test[0-9]*' для чего-либо со строкой "тест", затем одна цифра, что-либо после этого.
2
12.03.2019, 09:11
4 ответа

Это не возможно на AIX даже с sed инструмент установлен.
Действительно необходимо использовать временный файл, любят предложенный terdon в комментариях к вопросу:

sed 's/a/b/' foo > bar && mv bar foo

Вы могли также использовать ed который действительно встраивает редактирование.

3
27.01.2020, 21:51
  • 1
    Почему это не было бы возможно с GNU sed установленный? –  Stéphane Chazelas 30.01.2014, 16:42
  • 2
    хорошо GNU, обеспеченный AIX не, тот, который Вы компилируете, может видеть также ==> stackoverflow.com/questions/7232797 / … –  Kiwy 30.01.2014, 16:43
  • 3
    -i был включен sed-3.95 (2002). IBM предлагает 3.0.2, 4.0.7 и 4.1.1 AFAICT. Если Вы не получите более старый, Вы получите-i. Также обратите внимание, что можно получить упакованную версию GNU sed для AIX из других источников. –  Stéphane Chazelas 30.01.2014, 17:08
  • 4
    Хорошо это означает мою администраторскую систему, никогда не обновляемую с 2002, я предполагаю. потому что даже с AIX 6.1 у меня нет возможности использовать тот –  Kiwy 30.01.2014, 17:17
  • 5
    @StéphaneChazelas я читал между строк Вашего комментария от 2 года назад: "-i был добавлен в sed-3.95 (2002). IBM предлагает 3.0.2, 4.0.7 и 4.1.1 AFAICT" импликация, что Вы видели последние версии AIX, предлагающего sed's, который поддерживал-i. –  Jeff Schaller♦ 20.04.2016, 18:25

вы можете использовать perl для этого:

perl -p -i.bak -e 's/old/new/g' test.txt

Будет создан .bak файл.

Или без файла .bak :

perl -pi -e  's/old/new/g' test.txt

Или установите sed-4.1.1 RPM из здесь .

4
27.01.2020, 21:51
  1. Определите переменную и используйте подоболочку для выполнить sed и перенаправить в файл. Очень важно использовать " (двойные кавычки) для защиты переменной $ value :

     value = $ (sed 's / old / new / g' file) && echo "$ value"> file 
     

Or

  1. Execute echo с подоболочкой, которую вы собираетесь выполнить 'sed' и перенаправление в файл:

     echo "$ (sed 's / old / new / g' file)"> file 
     
-1
27.01.2020, 21:51

Использовать стандартный совместимый sed, который не имеет -i, выполнить в -редактирование места таким образом, чтобы не изменялись разрешения, права собственности на файлы и некоторые другие метаданные, а также жесткие ссылки и символические ссылки. не сломаны:

cp file file.tmp &&
sed 'expression' file.tmp >file &&
rm -f file.tmp

Это создает временную копию файла, который мы хотим отредактировать, а затем применяет команду sedк этой копии, перенаправляя результат к исходному имени файла.

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

3
27.01.2020, 21:51

Теги

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