Articles of shell

Shell程序 – 确定文件中的平均字长

我正在尝试编写一个shell程序来确定文件中的平均字长。 我假设我需要以某种方式使用wc和expr 。 指导正确的方向将是伟大的!

是否有可能在sed地址做简单的算术?

是否有可能在sed地址做简单的算术? 根据“地址”手册部分来看,答案似乎不是。 但也许有一个解决方法? 例如,如何打印文件的第二行? 这将是很酷的东西,如: sed -n '$-1 p' file 但它显然不工作…所以我通常必须做多个sed调用,首先用于标识行,然后使用shell $((expr))进行算术运算,然后再次调用sed。 喜欢这个: sed -n "$(($(sed -n '$ =' file)-1)) p" file 是否有一个“更好”,更紧凑,更可读的方式与sed地址算术? 在一个严重的拖延时刻,我决定写一个小脚本,迅速改变xterm色彩scheme 。 这个想法是,你有.Xresources文件的开始标记和结束标记: … START_MARKER … END_MARKER … 而您想要删除标记之间的所有内容,而不是标记本身。 再次,做这样的事情会很棒: sed '/START_MARKER/+1,/END_MARKER/-1 d' file …但你不能!

如何用相同的环境产生一个新的xterm

我使用的是virtualenv (它设置了一些环境variables)。 现在,我想产生一个具有相同环境的新terminal窗口。 如果我尝试: xterm & 我得到一个新的terminal,但环境是默认的环境,即当我在新的terminal上input以下行: pserve –reload development.ini 我得到: >> pserve: Command not found. 另一方面,如果我执行: xterm -e pserve –reload development.ini & 它打开一个运行pserve的新terminal。 所以,我的问题是: 一般如何在同一个环境下开辟一个新的terminal 当我使用-e开关运行时,新terminal如何findpserve ?

在bash中读取一个CSV文件

我有一个要求阅读在shell中的CSV文件,那么我确定单元格中的单行CSV文件。 但是,如果我们在CSV文件的单元格中有多行,那么我无法分隔CSV文件。 Filename Lines /etc/hosts example.test.com example2.test.com /etc/resolv.conf nameserver dns.test.com search test.com 我将以CSV文件的forms从用户那里获取input,并且必须将给定的行添加到提到的文件中。 这里有一个CSV文件的每个单元格中有多行,如果我试图捕捉它以不同的顺序给出的文件。 [user2@mon ~]$ cat test2.csv "Filename","Lines" "/etc/hosts","example.test.com" ,"example2.test.com" "/etc/resolv.conf","nameserver dns.test.com" ,"search test.com" 有什么办法可以从文件中读取多行文件,而且行数总是不一样的。

Shell脚本:在日志的每一行中查找一个string并发送邮件

我有一个日志文件有像下面的行。 10.10.205.100 100.10.56.5 – [23/Oct/2012:15:30:01 +0000] "GET /way/?cb=777:Obj.Status&log=signing_in_service&cache=1350334642666 HTTP/1.1" 200 53 "https://www.sample.com/signin?off=undefined&questions=&nouser=&link=%23&country=origin&displayLayer=" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2" "PD_STATEFUL_d64f218a-fa6a-11e0-b7df-623c1eeb9903=%2Fgateway; PD-ERR=0x132120c8; PD-HOST=sample.com; PD-REFERER=https://www.sample.com/profile%3Fundefined%3D; PD-REFPAGE=signin_user; pSite=; __SIGNIN=signin%23cw%3D400%3Ach%3D321; mmcore.pd=916254201%7CAgAAAAoBQvp/zPBKCBGRP6QBAOZMgV9Kf89IAAsAAAAtzSlGSn/PSAAAAAD/////AEoIAQAAAAAAAQAAAAAA////////////////AAAAAAABRQ%3D%3D; mmcore.srv=cg4.use; mmid=-1116944464%7CAgAAAAr6f8zwSggAAA%3D%3D; mmcore.tst=0.155; PD-SGNPAGE=http%3A%2F%2Fwww.sample.com%2Fcommon%2Fregister%2Feproxy.html; UnicaNIODID=A3nRYVRjMyy-Xv66UJt; survey=1350334587161" 我试图得到在上面的行200的http状态码。 这将放在string“HTTP / 1.1”后面。http的版本(这里是1.1)在所有行中可能不常见。 根据状态代码(如果它不是200和其他几个状态),我必须发送一个电子邮件以及日志文件。

访问一个variables显示在单行而不是多行

我将多行存储在一个variables中,当我尝试访问它们时,它显示在一行中。 $ echo -e "A\nB" A B $ VAR=`echo -e "A\nB"` $ echo $VAR AB 让我知道有什么办法得到输出一样的命令。 我希望A,B在访问时处于不同的路线。

如何检查一个string是否至less有一个字母字符?

我想检查一个string是否至less有一个字母字符? 正则expression式可能是这样的: "^.*[a-zA-Z].*$" 然而,我想判断一个string是否至less有一个字母字符? 所以我想用,就像 if [ it contains at least one alphabetic character];then … else … fi 所以我不知道如何使用正则expression式 我试过了 if [ "$x"=~[a-zA-Z]+ ];then echo "yes"; else echo "no" ;fi or if [ "$x"=~"^.*[a-zA-Z].*$" ];then echo "yes"; else echo "no" ;fi 并用x =“1234”进行testing,以上两个脚本输出的结果都是“是”,所以是错的 如何实现我的目标?谢谢!

在if语句中使用pipe不起作用

我是新的shell脚本,并坚持这一点 – 我试过这个if子句: if [ unrar l "$filename" | grep -P "\.(?:r\d\d|r\d\d\d|.rar)$ ]; then… 它不工作,所以试过这个debugging输出 – 我没有输出到$grep_output : $grep_output = unrar l "$filename" | grep -P "\.(?:r\d\d|r\d\d\d|.rar)$" 如果我直接在shell上执行它,它没有任何问题: unrar l "$filename" | grep -P "\.(?:r\d\d|r\d\d\d|.rar)$ 我的错误在哪里? 提前致谢!

Shell脚本:需要使用以前的文件夹而不是当前目录

有这样的结构: /dir1/dir2/dir3/dir4/my_script.sh 在我的脚本中,有一点需要将dir3的完整path存储到一个variables中。 我知道这个作品: CURRENT=`pwd` 但是,如何储存前一个? 警告:我已经search了类似的问题,但都包括更改当前目录,这是我想要避免的。 编辑:我的意思是,当我运行my_script.sh,当前目录是/ dir1 / dir2 / dir3 / dir4 /我想存储在一个variables只是:/ dir1 / dir2 / dir3 /

用参数调用函数的Bash脚本'if'语句

我想要一个if语句在我的bash脚本中: if [[ "$v" == "A" || my_func $x $y ]] ; then 但我得到错误“有条件的二元运算符预期”。 我已经试过在my_func的调用中把参数放在参数的周围,但是还是不行。 试图玩eval,这也没有帮助。 谢谢你的帮助。