измените файл с помощью awk или sed

  1. tcsh не имеют функций вообще; таким образом, это - отрицание. Общая стратегия состоит в том, чтобы создать отдельный сценарий и вызов, что как внешняя программа (для некоторых вещей, как псевдоним , источник будет также работать).

  2. ну, это не действительно вопрос; я могу подтвердить, что ваши наблюдения корректны :-) Добавление COMP_POINT не могло бы быть трудным хотя; на самом деле вот патч (который является НЕ протестирован очень хорошо):

     разность - мерзавец i/tc.const.c w/tc.const.c
    индекс c472acc. 1a69fee 100644
    ---i/tc.const.c
    +++ w/tc.const.c
    @@-469,6 +469,8 @@ символьный STRPROGRAM_ENVIRONMENT [] = {'P', 'R', 'O', 'G', 'R', 'M',
     #endif/* _OSD_POSIX */
     Символьный STRCOMMAND_LINE [] = {'C', 'O', 'M', 'M', 'N', 'D', '_', 'L', 'я',
     'N', 'E', '\0'};
    +Char STRCOMP_POINT [] = {'C', 'O', 'M', 'P', '_', 'P', 'O', 'я', 'N', 'T',
    + '\0' };
    
     #ifdef WARP
     Символьный STRwarp [] = {'w', 'r', 'p', '\0'};
    разность - мерзавец i/tw.comp.c w/tw.comp.c
    индекс 03da837. 101962f 100644
    ---i/tw.comp.c
    +++ w/tw.comp.c
    @@-635,9 +635,12 @@ tw_complete (Символ константы *строка, Символ ** слово, Символ ** кусочек, международный взгляд, eChar *suf)
     значение по умолчанию:
     аварийное прекращение работы ();/* не Может произойти */
     }
    +
     tsetenv (STRCOMMAND_LINE, строка);
    + tsetenv (STRCOMP_POINT, str2short (xasprintf (" %d", (символьный) CursorH)));
     разрешение = tw_result (com, кусочек);
     Unsetenv (STRCOMMAND_LINE);
    + Unsetenv (STRCOMP_POINT);
     cleanup_until (buf);
     возвратить разрешение;
     }
    
  3. Вы, вероятно, хотите поднять это на tcsh mailinglist, все же.

0
15.04.2015, 12:57
3 ответа

Общая awk альтернатива:

awk '
    /^uid:/ {
        uid=$2
    }
    /^homeDirectory:/ {
        if ($NF !~ uid"$") { $NF = $NF"/"uid }
    }
    { print }
    ' text.file
2
28.01.2020, 02:36

Эта awk версия сохранит записи, которые уже имеют идентификатор пользователя как часть homeDirectory:

awk -F ": *" '
    $1=="uid" { uid = $2 }
    $1=="homeDirectory" && $2=="/home/myworker/2013" { $0=$0"/"uid }
    { print }
' infile > outfile

(Примечание: в ваших данных не должно быть трейлинговых пространств. Чтобы очистить это также можно добавить команду { gsub(/ +$/, "", $2 }] в качестве первой команды программы awk)

.
0
28.01.2020, 02:36

awk Файл:

$1=="uid" { uid=substr($2,2) ; }
$1=="homeDirectory" { printf "%s: /home/myworker/2013/%s\n",$1,uid ; next ;}
{ print ;} 

, который

  • в основном запомнит UID
  • Распечатать фиксированный дом DIR, основание на фиксированном году и последний UID.

Быть вызвать с

awk -F: -f tmp.awk < yourinputfile

где

  • -F: Использование: в качестве сепаратора
  • -F TMP.awk Используйте файл awk
0
28.01.2020, 02:36

Теги

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