use*_*188 -3 python linux bash awk sed
我正在编写一个简单的脚本,需要使用bash命令来获取第一行的第二个单词.在下面的文件中,我想只打印出"主机",虽然我在这方面遇到了麻烦.
-bash-3.2$ cat filewithstuff
SERVERNAME host
DOMAIN all-nfs
-bash-3.2$ cat filewithstuff | awk '{print $2}'
host
all-nfs
Run Code Online (Sandbox Code Playgroud)
我能够在linux主机上使用以下命令:
cat filewithstuff | sed -n 1p | awk "{print \$1}"
Run Code Online (Sandbox Code Playgroud)
虽然当我从Python脚本运行它时,我得到以下错误:
Executed: /bin/bash -l -c "cat filewithstuff | sed -n 1p | awk \"{print \\$1}\""
Aborting.
Fatal error: One or more hosts failed while executing task 'uninstallApp'
Aborting.
Run Code Online (Sandbox Code Playgroud)
似乎我的Python脚本不喜欢bash命令中的"\",有没有人知道我可以尝试的替代命令?
让awk完成所有工作:
command | awk 'NR==1 {print $2}'
Run Code Online (Sandbox Code Playgroud)
要么
awk 'NR==1 {print $2}' file
Run Code Online (Sandbox Code Playgroud)
NR代表记录数(此处的行数),$2代表第二个字段.总之,它告诉awk从第一行打印第二个字段.
如果您怀疑输出会非常大,请添加一个exit停止处理:{print $2; exit}.
仅使用内置函数(请参阅bash-hackers 页面read或BashFAQ #1):
read -r _ secondword _ <file
echo "Second word is: $secondword"
Run Code Online (Sandbox Code Playgroud)
read...或者,从程序的输出中读取(由于BashFAQ #24 ,无法通过管道传输):
read -r _ secondword _ < <(yourcommand)
Run Code Online (Sandbox Code Playgroud)
这里的下划线是占位符:第一个下划线充当第一个单词的接收器,最后一个下划线充当第三个单词和任何剩余单词(如果存在)的接收器。
这比涉及外部命令(awk、head、cut等)的任何操作都要快,因为它完全由 shell 本身执行。
| 归档时间: |
|
| 查看次数: |
2695 次 |
| 最近记录: |