2015-02-02 3 views
1

Я пытаюсь сделать следующее:Как сделать инлайн оболочки заменить наряду с другими параметрами форматирования, как вырезать и трубы

Начните с переменной, содержащей список разделенных пробелами параметров - $ cmd_str (содержит около 6 параметров), позволяет сказать, что это выглядит следующим образом:

cmd p1 p2 p3 p4 p5 p6 

Моя цель состоит в том, чтобы попытаться напечатать их:

Params: 
    1 - p1 
    2 - p2 
    etc... 

поэтому сначала я должен отрезать «CMD» строку, а затем я собирался заменить пробелы с «\ п \ т [п] -», где п число

До сих пор у меня есть:

echo $cmd_str | cut -c5- 

Затем я хотел бы добавить строку замены, но не мог заставить его работать

echo ${$cmd_str | cut -c5-// /"\n\tnum - "} 

Тогда мне придётся заменить каждое появление «num» на число в цикле ... но у меня так далеко не получилось! - Может быть, замедленный способ это сделать?

ответ

2

Использование BASH массивы:

cmd_str="cmd p1 p2 p3 p4 p5 p6" 
arr=($cmd_str) 
for ((i=1; i<${#arr[@]}; i++)); do printf "%d - %s\n" $i "${arr[$i]}"; done 
1 - p1 
2 - p2 
3 - p3 
4 - p4 
5 - p5 
6 - p6 

Или с помощью awk:

awk -v RS=' ' 'NR>1{printf "%d - %s\n", NR-1, $1}' <<< "$cmd_str" 
1 - p1 
2 - p2 
3 - p3 
4 - p4 
5 - p5 
6 - p6 
+1

смешно ........... LY легко !, ну по крайней мере первое решение. Я полностью не понимаю синтаксис второго решения - это вне меня:), что даже делает «<<<»? - Огромное спасибо. –

+1

'<<<' называется здесь-строка, которая используется для подачи некоторой строки в качестве входных данных для некоторой команды. '-v RS = '' 'устанавливает разделитель входных данных как пространство для' awk'. Но да, мое предпочтение также относится к первому решению. – anubhava

+1

Спасибо anubhava, мне нравится, что <<< может пригодиться! –

2

cmd Если это ваш сценарий, используйте специальный параметр @ который расширяет позиционные параметры.

Пример:

let i=0 
echo "Params:" 
for p in "${@}"; do 
    let i+=1 
    printf "\t${i} - %s\n" $p 
done 
+0

Его параметры не передаются моей функции, но похоже, что это сработает, я могу извлечь printf и loop и, вероятно, использовать это –

Смежные вопросы