Jawaban:
Agak hacky, tetapi ini mungkin cara terpendek untuk melakukan apa yang Anda tanyakan dalam pertanyaan (gunakan pipa untuk menerima stdoutdari echo "input"sebagai stdinke proses / perintah lain:
echo "input" | awk '{print $1"string"}'
Keluaran:
inputstring
Tugas apa yang sebenarnya Anda coba selesaikan? Lebih banyak konteks dapat memberi Anda lebih banyak arahan tentang solusi yang lebih baik.
Perbarui - menanggapi komentar:
@Bayu_joo
Cara yang lebih idiomatis untuk melakukan apa yang Anda inginkan adalah:
echo 'http://dx.doi.org/'"$(pbpaste)"
The $(...)sintaks disebut perintah substitusi . Singkatnya, ia mengeksekusi perintah yang diapit dalam subkulit baru, dan mengganti stdoutoutputnya ke tempat $(...)dipanggil di shell induk. Jadi Anda akan mendapatkan, pada dasarnya:
echo 'http://dx.doi.org/'"rsif.2012.0125"
'{print $0"string"}'untuk mengambil semuanya.
stringke setiap baris. Coba echo 'input'\n'another line' | awk '{print $0"string"}'.
gunakan cat -untuk membaca dari stdin, dan masukkan $()ke dalam untuk membuang baris baru yang tertinggal
echo input | COMMAND "$(cat -)string"
Namun mengapa Anda tidak menjatuhkan pipa dan mengambil output dari sisi kiri dalam substitusi perintah:
COMMAND "$(echo input)string"
Saya sering menggunakan pipa, jadi ini cenderung menjadi cara mudah untuk memberi awalan dan akhiran stdin:
echo -n "my standard in" | cat <(echo -n "prefix... ") - <(echo " ...suffix")
prefix... my standard in ...suffix
pipedancat
echo "my standard in" | echo -e "prefix\n$(cat -)\nsuffix":? Atau, versi yang lebih mudah dibaca:echo "my standard in" | printf "%s\n%s\n%s\n" "prefix" "$(cat -)" "suffix"
Anda dapat melakukannya dengan sed:
seq 5 | sed '$a\6'
seq 5 | sed '$ s/.*/\0 6/'
Dalam contoh Anda:
echo input | sed 's/.*/\0string/'
Ada beberapa cara untuk melakukannya, menurut saya yang terbaik adalah:
echo input | while read line; do echo $line string; done
Lain dapat dengan mengganti "$" (karakter akhir baris) dengan "string" dalam perintah sed:
echo input | sed "s/$/ string/g"
Mengapa saya lebih memilih yang pertama? Karena itu menggabungkan string ke stdin secara instan, misalnya dengan perintah berikut:
(echo input_one ;sleep 5; echo input_two ) | while read line; do echo $line string; done
Anda segera mendapatkan hasil pertama:
input_one string
dan kemudian setelah 5 detik Anda mendapatkan gema lainnya:
input_two string
Di sisi lain, menggunakan "sed" terlebih dahulu melakukan semua konten tanda kurung dan kemudian memberikannya ke "sed", jadi perintah
(echo input_one ;sleep 5; echo input_two ) | sed "s/$/ string/g"
akan menampilkan kedua baris
input_one string
input_two string
setelah 5 detik.
Ini bisa sangat berguna jika Anda melakukan panggilan ke fungsi yang membutuhkan waktu lama untuk menyelesaikannya dan ingin terus diperbarui tentang keluaran fungsi.
Saya tahu ini terlambat beberapa tahun, tetapi Anda dapat melakukannya dengan opsi xargs -J:
echo "input" | xargs -J "%" echo "%" "string"
Dan karena ini adalah xargs, Anda dapat melakukan ini pada beberapa baris file sekaligus. Jika file 'names' memiliki tiga baris, seperti:
Adam
Bob
Charlie
Anda bisa melakukan:
cat names | xargs -n 1 -J "%" echo "I like" "%" "because he is nice"
-Jsepertinya tidak standar / umum. Di Linux (di mana xargsbagiannya GNU findutils) saya mendapatkan error: Di xargs: invalid option -- 'J'sistem mana ini?
-Jadalah untuk versi Mac. Untuk Linux -Imelakukan fungsi yang sama.
cat names | xargs -I% echo "I like % because he is nice"IOW: tidak perlu untuk -n 1( xargspanggilan echosekali per baris masukan, karena -Imenyiratkan -L1) Juga, semua kutipan arg terpisah, tampaknya berlebihan.
Perintah yang Anda kirimkan akan mengambil string "input" menggunakannya sebagai aliran stdin COMMAND, yang tidak akan menghasilkan hasil yang Anda cari kecuali COMMAND pertama kali mencetak konten stdin dan kemudian mencetak argumen baris perintahnya.
Sepertinya yang ingin Anda lakukan lebih dekat dengan penggantian perintah.
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
Dengan substitusi perintah Anda dapat memiliki baris perintah seperti ini:
echo input `COMMAND "string"`
Ini pertama-tama akan mengevaluasi COMMAND dengan "string" sebagai input, dan kemudian memperluas hasil eksekusi perintah tersebut ke dalam baris, menggantikan apa yang ada di antara karakter '`'.
echo input $(COMMAND "string"), daripada backticks. Semoga beruntung untuk semuanya.
pbpaste | awk '{print "http://dx.doi.org/"$1}'dan dapatkanhttp://dx.doi.org/10.1098/rsif.2012.0125