Как я могу получить код ошибки (код выхода) “команды” типа файла запроса xdg-пантомимы?

Попробуйте это (простофиля необходима).

awk '{a=gensub(/.*#([0-9]+)(\").*/,"\\1","g",$0);if(a~/[0-9]+/) {gsub(/[0-9]+\"/,a+11"\"",$0);}print $0}' YourFile

Протестируйте со своим примером:

kent$  echo '(bookmarks
("Chapter 1 Introduction 1" "#1"
("1.1 Problem Statement and Basic Definitions 2" "#2")
("Exercises 30" "#30")
("Notes and References 34" "#34"))
)
'|awk '{a=gensub(/.*#([0-9]+)(\").*/,"\\1","g",$0);if(a~/[0-9]+/) {gsub(/[0-9]+\"/,a+11"\"",$0);}print $0}'   
(bookmarks
("Chapter 1 Introduction 12" "#12"
("1.1 Problem Statement and Basic Definitions 13" "#13")
("Exercises 41" "#41")
("Notes and References 45" "#45"))
)

Обратите внимание, что эта команда не будет работать, если эти два числа (например, 1 дюйм и "#1") будут отличаться. или существует больше чисел в той же строке с этим шаблоном (например, 23 дюйма... 32 дюйма... "#123") в одной строке.


ОБНОВЛЕНИЕ

С тех пор @Tim (OP) сказал число, сопровождаемое " в той же строке могло отличаться, я сделал некоторые изменения на своем предыдущем решении и заставил его работать на Ваш новый пример.

BTW, от примера, я чувствую, что это могла быть структура оглавления, таким образом, я не вижу, как эти два числа могли отличаться. Сначала был бы печатный номер страницы, и 2-й с # будет индекс страницы.Я прав?

Так или иначе Вы знаете свое требование лучше всего. Теперь новое решение, все еще с простофилей (я повреждаю команду в строки, чтобы помочь читать):

awk 'BEGIN{FS=OFS="\" \"#"}{if(NF<2){print;next;}
        a=gensub(/.* ([0-9]+)$/,"\\1","g",$1);
        b=gensub(/([0-9]+)\"/,"\\1","g",$2); 
        gsub(/[0-9]+$/,a+11,$1);
        gsub(/^[0-9]+/,b+11,$2);
        print $1,$2
}' yourFile

протестируйте со своим новым примером:

kent$  echo '(bookmarks
("Chapter 1 Introduction 1" "#1"
("1.1 Problem Statement and Basic Definitions 23" "#2")
("Exercises 31" "#30")
("Notes and References 42" "#34"))
)
'|awk 'BEGIN{FS=OFS="\" \"#"}{if(NF<2){print;next;}
        a=gensub(/.* ([0-9]+)$/,"\\1","g",$1);
        b=gensub(/([0-9]+)\"/,"\\1","g",$2); 
        gsub(/[0-9]+$/,a+11,$1);
        gsub(/^[0-9]+/,b+11,$2);
        print $1,$2
}'                        
(bookmarks
("Chapter 1 Introduction 12" "#12"
("1.1 Problem Statement and Basic Definitions 34" "#13")
("Exercises 42" "#41")
("Notes and References 53" "#45"))
)


EDIT2 на основе комментария @Tim

(1) FS=OFS = "\" \"#" означают, что разделитель поля и во вводе и выводе удваивает кавычку, пространство, двойная кавычка и в #? Почему указывают двойную кавычку дважды?

Вы правы для разделителя в обеих входных и выходных частях. Это определило разделитель как:

" "#

Существует две двойных кавычки, потому что легче поймать эти два числа, которые Вы хотите (на основе Вашего входа в качестве примера).

(2) В/.* ([0-9] +) $/, $ означает конец строки?

Точно!

(3) В третьем аргументе gensub (), каково различие между "g" и "G"? нет никакого различия между G и g. Проверьте это:

gensub(regexp, replacement, how [, target]) #
    Search the target string target for matches of the regular expression regexp. 
    If "how" is a string beginning with ‘g’ or ‘G’ (short for “global”), then 
        replace all matches of regexp with replacement.

Это из http://www.gnu.org/s/gawk/manual/html_node/String-Functions.html. можно читать для получения подробного использования gensub.

3
23.03.2011, 02:24
2 ответа

В Полученных из границы оболочках (sh, ash, bash, dash, zsh...) код выхода последней управляемой программы находится в $? переменная:

$ ls /no-such-file
ls: /no-such-file: No such file or directory
$ echo $?
2

Так в этом случае, код выхода ls 2.

8
27.01.2020, 21:11
  • 1
    ! Это не ошибка здесь, и код ошибки 0. –  Amanda 22.03.2011, 10:49

"application/octet-stream" (неизвестный тип файла)

не сообщение об ошибке, это просто означает, что файл не знает то, что содержит Ваш файл. Это могло произойти для зашифрованных файлов, например, они выглядят настолько случайными, что файл не может распечатать что-то более точное, чем "это - данные".

0
27.01.2020, 21:11

Теги

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