Articles of bash

shell脚本将数据parsing为variables,然后更新数据库

我的networking上有一个设备将数据发布到html页面。 我需要能够从页面收集数据并将其插入到我的数据库中,以便我可以对数据进行历史参考。 我能够使用以下命令从网站中检索字段。 结果返回由换行符分隔的三个数字。 我想运行这个作为一个Linux的cron作业,所以我想用一个Linux脚本来: 将数据(数字)保存到variables中 连接到我的数据库,并将数据插入表中 我的命令行检索信息如下。 这对parsing设备中的数据非常有用: curl -s http://local_device.com/dtm.html?address=C5:0 | grep -Po '[0-9]+(?=[^0-9]+(C5:2<|C5:6<|C5:13))'

在文件中的grep和replacestring

我有一个关于我的磁盘iostat信息的文件在一行,但时间停留在上述行。 当我使用grep时,我可以收集这两行。 但是我想把时间放在同一行的磁盘信息中。 grep -E "sda|22-09" iostat.dat 22-09-2015 15:36:10 sda 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 22-09-2015 15:36:12 sda 0,00 2,00 0,50 17,00 0,00 0,07 8,91 0,13 7,20 0,00 7,41 5,94 10,40 22-09-2015 15:36:14 sda 0,00 10,50 0,00 3,00 0,00 0,06 38,67 0,07 24,00 0,00 24,00 24,00 7,20 […]

Bash脚本variables作用域问题

username="hello" password="3333" function login { # 1 – Username # 2 – Password match=0 cat LoginsMaintMenu.txt | while read line; do x=`echo $line | awk '{print $1}'` y=`echo $line | awk '{print $2}'` if [ "${x}" == "${1}" ] && [ "${y}" == "${2}" ]; then echo "match" match=1 echo $match break fi done echo […]

如何通过unix中的数据来validation组的数量

我有一个logging列表如下 资源: a,yes a,yes b,No c,N/A c,N/A c,N/A d,xyz d,abc d,abc 输出: a, Yes 2 b, No 1 c, N/A 3 d, xyz 1 d, abc 2 c, N/A "File is not correct" 这里的“是”和“否”是可以接受的单词,如果其他的单词数大于单个$ 1值的“是”或“否”字数,那么我们发出一个类似“文件不好” 我已经尝试了下面的脚本 awk -F, '{a[$1]++;}END{for (i in a)print i, a[i];}' filetest.txt

recursion地列出tar / zip档案的内容

我知道如何获得zip / tar文件的内容,例如: http : //www.if-not-true-then-false.com/2010/list-tar-tar-gz-tar-bz2-contents/ 但在我的情况:我想获得一个zip档案的所有内容。 ABCD.zip –>somefile.txt –>somezip.zip –>someother.tar 目标:我想要得到ABCD.zip的内容,以便我还能得到somezip.zip和someother.tar的更多内容,someother.tar也可能有其他一些拉链等。我怎样才能做到这一点与recursion? 可能用bash / perl脚本?

Linux读取空格和特殊字符

我想用空格和特殊字符来阅读,因为我需要使用该string的名称来删除文件。 我不知道如何处理“\”和读取空格。 我可能做错了。 while read LINE do for arg in $LINE do if [ "${args}" = "" ] then args="${args}" else args="${args}' '" fi args="${args}${arg}" done 我需要做一些像echo sadsad asddsa ;' dsasa | ./sth.sh | xargs -l rm -f echo sadsad asddsa ;' dsasa | ./sth.sh | xargs -l rm -f 我认为我需要将IFS设置为“|” 但它不能正常工作。 我需要读input结束调用它。 编辑:好吧,我想我只需要做一些与xargs和sed。 好吧,差不多我有一些错误,但我得到的文件名 […]

从文本文件中获取nu.nl的新闻标题

我想在文本文件中有nu.nl的新闻标题,以便我可以在我的bash脚本中使用它们。 我也想用bash脚本来提取这些标题。 我今天添加了nu.nl主页的屏幕截图( http://img.zgserver.com/linux/gS2mp.png )。 例如,我想在一个文本文件中: "Ook met Grieks referendum houdt Eurogroep vandaag nog overleg <br/> Koeweit pakt verdachten van aanslag op <br/> Ruim 4 op de 5 boetes voor te hard rijden <br/> … et cetera" 我正在Ubuntu 14.04.2 LTS上编程bash脚本(GNU / Linux 3.16.0-41-generic x86_64)

在shell脚本中使用cd和cd命令是另一个目录中的一些计算的好方法

我在我的shell脚本中使用cd进入一个计算目录,并再次使用cd – 返回。 这是一个很好的使用方法吗? 我的脚本是: input_dir=/home/abc/2001/01/ cd $input_dir #Execute some programm with ifile.txt eg awk '$1 > 99 {printf "%.2f" "$1"}' ifile.txt > ofile.tx cd – 或者我们应该总是提到path名? 喜欢: input_dir=/home/abc/2001/01/ awk '$1 > 99 {printf "%.2f" "$1"}' $input_dir/ifile.txt > $input_dir/ofile.txt 你能否build议如果有什么简单的方法来减less文本?

如何在bash中间接地分配一个variables来从Standard In,File和执行输出中获取多行数据

我在这里和其他地方发现了许多片段,回答了这个问题的一部分。 我甚至设法以低效的方式在很多步骤中做到这一点。 如果可能的话, 我真的很想find执行这个任务的单行执行 ,而不是分配给一个variables,并复制它几次来执行任务。 例如 executeToVar () { # Takes Arg1: NAME OF VARIABLE TO STORE IN # All Remaining Arguments Are Executed local STORE_INvar="${1}" ; shift eval ${STORE_INvar}=\""$( "$@" 2>&1 )"\" } 总的来说,如果$ executeToVar SOME_VAR ls -l * #实际上会填充SOME_VAR和从其余参数中取出的ls -l *命令执行的输出。 但是,如果命令在最后输出空行,(对于例如- echo -e -n '\n\n123\n456\n789\n\n'应该在开始和结束处具有2个新行)这些被bash的子执行过程所剥夺。 我在其他类似的post中看到,通过在stream的末尾添加一个标记“x”来解决这个问题,例如将子执行转化为如下forms: eval ${STORE_INvar}=\""$( "$@" 2>&1 ; echo […]

如何让厨师重新加载全球path

我正在设置一个简单的厨师食谱来安装一个二进制应用程序。 在Ubuntu或者CentOS中没有这个软件包,所以我写了一个配方, 从源代码下载tar 从tar中提取内容 创build一个将app_home添加到全局$ PATH的bash脚本(它需要是全局的) 重新加载$ ​​PATH,以便当前login的用户可以在shell命令中引用它 我很好,第3步,但我不能让厨师重新加载$ ​​PATH。 我已经尝试在.bash_profile以及/etc/profile.d/放置新的导出PATH = $ PATH:/ path / to / app / bin ,但是没有成功。 如果我退出shell,并重新ssh我正确地看到PATH,但从来没有在同一个会话,当我跑sudo chef-client 。 有什么办法,厨师可以自动touch或重新加载PATH,使当前login的用户可以使用它?