我有兩個字符串,我想與空間分裂和兩個兩個地使用它們:如何在shell中拆分字符串?
namespaces="Calc Fs"
files="calc.hpp fs.hpp"
例如,我想用這樣的:command -q namespace[i] -l files[j]
我在小白Bourne Shell。
我有兩個字符串,我想與空間分裂和兩個兩個地使用它們:如何在shell中拆分字符串?
namespaces="Calc Fs"
files="calc.hpp fs.hpp"
例如,我想用這樣的:command -q namespace[i] -l files[j]
我在小白Bourne Shell。
echo "hello world" | awk '{split($0, array, " ")} END{print array[2]}'
是你如何分割一個簡單的字符串。如果你想要做的是循環遍歷分裂的兩個字符串的組合,那麼你想是這樣的
:
for namespace in $namespaces
do
for file in $files
do
command -q $namespace -l $file
done
done
編輯: 或擴大被張貼,你可以在AWK解決方案也只是做:
echo $foo | awk '{print $'$i'}'
編輯2:
免責聲明:我不不自稱是一個你是awk的專家,所以在這個解釋中可能會有一些小錯誤。
基本上上面的代碼片段是將$foo
的內容輸入到awk的標準輸入中。 Awk從行標準中逐行讀取,根據字段分隔符將每行分隔爲字段,缺省情況下是任意數量的空格。 Awk執行它作爲參數給出的程序。在這種情況下,shell將'{ print $'$1' }'
擴展爲{ print $1 }
,它只是告訴awk打印其輸入的每一行的字段編號1。
如果您想要了解更多信息,我認爲this blog post在描述基礎知識(以及sed和grep的基礎知識)方面做得非常好,如果您在開始時跳過理論性較強的東西(除非您到那種東西)。
你能告訴我關於** awk **的更多信息嗎? – softghost 2012-02-18 23:48:20
我不是awk專家,但我在我的回答中添加了一個解釋 – 2012-02-19 00:08:17
將它放到一個數組,像這樣:
#!/bin/bash
namespaces="Calc Fs"
files="calc.hpp fs.hpp"
i=1
j=0
name_arr=($namespaces)
file_arr=($files)
command -q "${name_arr[i]}" -l "${file_arr[j]}"
我想找到一個辦法做到這一點不陣列,這就是:
paste -d " " <(tr " " "\n" <<< $namespaces) <(tr " " "\n" <<< $files) |
while read namespace file; do
command -q $namespace -l $file
done
兩個特殊用途的位置:進程替換( <(...)
)和這裏字符串(<<<
)。這裏字符串是echo $namespaces | tr " " "\n"
的快捷方式。流程替換是fifo創建的捷徑,它允許使用命令的輸出而不是文件運行paste
。
如果您正在使用的zsh 這可以很容易的:
files="calc.hpp fs.hpp"
# all elements
print -l ${(s/ /)files}
# just the first one
echo ${${(s/ /)files}[1]} # just the first one
在Python,這將是['zip'](http://docs.python.org/library/functions.html #zip)功能。 [bash中的Python zip()行爲?](http://stackoverflow.com/questions/6145540/python-zip-behavior-in-bash)可能會有所幫助。 – 2012-02-18 22:22:48