可可熊D窝

Keep it simple, stupid


  • 首页

  • 关于

  • 标签182

  • 分类8

  • 归档359

  • 搜索

shell脚本解题1

发表 2008-07-10 | 分类 编程相关 | 评论数:
| 字数: 2.8k | 阅读 ≈ 3 分钟

问题:请教如何得到一个目录树的最深目录路径?

解法:
1.
find -type d | awk ‘{if( max < gsub(/\//,”/“)) {max= gsub(/\//,”/“);maxp=$0”/“} else if (max == gsub(/\//,”/“)) maxp=maxp”\n”$0”/“} END{print maxp}’

2.
find -type d -printf “%d %p\n” | sort -nrk1 | awk ‘NR==1{a=$1}a==$1{print $2}’

问题:我想将包含read的行放在echo单词的后面

解法:
[bash]sed ‘/read/{h;d};/echo/{G;s/(.echo)(.)\n(.*)/\1\3\2/}’ urfile

问题:怎么copy一个目录中的某些文件,但保持目录结构?

比如说,我想copy

sourcedir\a\b\c.java
sourcedir\a\b\c.cs
sourcedir\a\b\d.java
sourcedir\a\b\d.cs

到

destdir\a\b\c.java
destdir\a\b\d.java

解法:
1.
rsync -av –include=’.java’ –filter=’hide,! /‘ ./sourcedir/ ./destdir

2.
[bash]cp -r b dest;find dest -type f ! -name “.java” | xargs rm
我的解法
3.
tar -c
| tar -xf- –wildcards -C destdir .java
4.
find sourcedir -name “
.java”|xargs -I {} cp –parents {} destdir

请教:如何枚举目录中所有没有子目录的目录的路径?

解法:
1.
find -type d -printf “%h\t%p\n” | awk ‘BEGIN{FS=”\t”}{a[$1]++;a[$2]++}END{for(i in a)if(a[i]==1)print i}’

2.
find -type d -ls|awk ‘$4==2{print $NF}’

问题:
有这样一个字符串 MG001:MobileLove:MGLoveCMD:down: 每个字段以冒号分割
STRING=”MG001:MobileLove:MGLoveCMD:down:”
我想把其中的每个字段分别赋值给另外几个变量,比如第一个字段赋值给SERV_CODE ,第二个赋值给
APPLICATION………….

解法:
IFS=: read SERV_CODE APPLICATION … <<<”$STRING”

Comments

cocobear: 1. man xargs: -I replace-str Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character. [cocobear@cocobear test]$ find b -name “.java”|xargs ls {} ls: 无法访问 {}: 没有那个文件或目录 b/08/07/1.java [cocobear@cocobear test]$ find b -name “.java”|xargs -I{} ls {} b/08/07/1.java 2. <<<这个我前面说过了,你看看bash手册,那里面提到了。 3. read就没有这样的用法;参考<<<。

dream: 对不起,有些看懂了,有些还没看懂,能不能帮我再解释一下,真的想学啊~~ 呵呵 1. 在你的例子4中,”find sourcedir -name “*.java”|xargs -I {} cp –parents {} destdir”。xargs -I {} 是什么意思?{}是指find所找到的内容,那么-I是什么意思?man xargs里没有-I的解释。 2. IFS=: read SERV_CODE APPLICATION … <<<”$STRING”中,<<<是什么意思? 以前从没有见过,< 不是作为输入的符号吗?怎么变成<<<了? 3. 我 echo “$STRING”| IFS=: read q w e r t 为什么赋不成值? 谢谢了~ :)

luguo: 我更喜欢: OLDIFS=$IFS; ….; IFS=$OLDIFS; 最后一个也可以用cut嘛!

luguo: 第1个问题,我的解法: $ find -type d | awk -F’/‘ ‘BEGIN {m=0;l=”” } {if(NF>m){m=NF; l=$0}} END {print l;}’ 当然,若有多个最深的它只能得到其中一个。

cocobear: to:dream 你可以看看find手册, {} 就是代表前面find找到的结果。xargs是用来执行标准输入的内容 Here Strings A variant of here documents, the format is: <<<word The word is expanded and supplied to the command on its standard input. 我也是学习中,很多都是别人写的脚本。

dream: 请问: 1. find sourcedir -name “*.java”|xargs -I {} cp –parents {} destdir 中, xargs -I {} 是什么意思? 2. cp –parents {} destdir 中 {} 是什么意思? 你的解法中, awk用的很多啊 ~ 你真是厉害的bash高手~~~

dream: 还有一个问题: 3. IFS=: read SERV_CODE APPLICATION … <<<”$STRING” 中,为什么要用<<<,而不是<<?

dream: 我 echo “$STRING”| IFS=: read q w e r t 为什么赋不成值?

dream: 哈哈,这回全明白了,太感谢了!

笔记本被偷了

发表 2008-07-09 | 分类 Life | 评论数:
| 字数: 836 | 阅读 ≈ 1 分钟

刚搬出去住的第二天就被偷了,窗子上的防盗栅栏被剪开了,其它东西什么也没动,去公司局报了案,那人问了半天我的私人情况,然后问问了什么时间被偷的,就让我回去看看有什么别的情况,有新的情况就向他报告,报你妈的头,公安局的人都是吃shi的。(听说他们对外地人都这样,本地人就不一样了,这年头,老子啥也不说了)

用了三年的电脑(IBM-T21)了,很多东西在里面,也花了4000多块钱,就这样没了,怪我自己不小心,别人都提醒我用完电脑应该藏起来……

这一年竟遇到这些事……

女友和别人结婚了
新浪因为病被拒了
红帽、久游因为挂课错过了
毕业证因为信号没拿到
刚出来住笔记本就被偷了

还有什么,让暴风雨来得更猛烈些吧……

Comments

cocobear: 很感谢你这么关心我。 我还算坚强,没倒下,呵呵。(不过我觉得我还是不够坚强,没有男人应该有的坚毅)

luguo: dp兄,一定要坚强啊!我们相信你!

dream: 以后要备份好数据。 不顺心的事总会过去的。 只有相信你是一个很出色的人就可以了。 我是很佩服你的。

草儿: coco,看来老天要给你降大任了,坚持啊~

wind: 这几年头,唉……

crazyfranc: 呵呵,人生不如意常想一二。要比衰我有时是你也见到的(linux让我玩的也会挂),买个新的吧,T系列早就不行了。

kongove: ???!!! 不说了,以后注意一下。 我可等你“熊”霸天下呢!

Amankwah: 兄弟,没问题,一切都会过去,你会好起来的!

草儿: 听说8月份联想要发布两款3000元的Thinkpad笔记本,配置还不错,要不咱买个?

cocobear: 买了再让偷走啊!! 如何不被偷才是关键。

nba_back: 哥们,人生并不是一番风顺 过去的一切都是我们人生的财富 但不应该成为现在和未来的包袱 记住该领略到的教训 忘记该忘记的失意 要相信自己!

可可熊: 呵呵,都过去了。

Brhum: 事情已久,祝生活顺利.买个二手t42才2000多

shell脚本解题

发表 2008-07-07 | 分类 编程相关 | 评论数:
| 字数: 1.2k | 阅读 ≈ 1 分钟

以下内容来自http://bbs.chinaunix.net/thread-1189933-1-1.html

现有数据,每一行中各个段间的分隔为多个空格,如下
  AAB BB CCC
A2B CB ABC
如何实现,转换成下面的格式
AAB|BB|CCC|
A2B|CB|ABC|

awk解法:
1.
[cocobear@cocobear ~]$ awk ‘BEGIN{OFS=”|”} {$1=$1;print}’ test.txt
AAB|BB|CCC
A2B|CB|ABC
结果最后少一个”|”
2.
[cocobear@cocobear ~]$ awk ‘{print $1”|”$2”|”$3”|”}’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|

3.
[cocobear@cocobear ~]$ awk -v OFS=’|’ ‘NF++’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|

sed解法:
1.
[cocobear@cocobear ~]$ sed ‘s/^ +//;s/ +/|/g;s/ *$/|/;’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|

2.
[cocobear@cocobear ~]$ sed ‘s/\s+//;s/\s+|$/|/g’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|
3.
[cocobear@cocobear ~]$ sed ‘s/^[[:blank:]]+//;s/[[:blank:]]+|$/|/g’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|

如何把一行的第一个字母换成大写?

文件如下: test.txt

#-----------------------------#
This is  line number 1

THIS IS Line Number 2

ThiS is Line Number THREE

this is line Number four
#-----------------------------#

解法:
sed ‘s/^(.)/\u\1/‘
sed ‘s/[a-z]/\u&/‘

& 指代替前面查找的关键字即[a-z] \1是指前面用(..)定义的第一个标签

Comments

cocobear: 表示匹配一个或者多个字符。

dream: sed ‘s/ \+/|/g’ 中\+是什么意思?

dream: 那 .* 不是也可以达到目的吗?

Fedora中mail命令无法发信

发表 2008-07-04 | 分类 Linux | 评论数:
| 字数: 692 | 阅读 ≈ 1 分钟

偶尔发现我机子上的mail命令不能发信,看了下错误日志:

Jul 4 15:08:20 cocobear sendmail[4167]: m6478JxK004167: to=cocobear.cn@gmail.com, ctladdr=cocobear (500/500), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=30113, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]

发信的状态是Connection refused by [127.0.0.1]

原来是sendmail在Fedora中默认的配置有问题,修改/etc/mail/sendmail.mc文件:
DAEMON_OPTIONS(Port=smtp,Name=MTA')dnl dnl #DAEMON_OPTIONS(Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl

把原来的指定Addr注释掉,原来这种配置只能向本机地址发送邮件,然后重新加载配置文件:
make -C /etc/mail

重启服务:
service sendmail restart

使用mail发信就正常了。

Update:080814:
今天又遇到这个问题了,CSDN那个文章没办法访问,看了看google的快照,顺便把过程写到这里。

Comments

luguo: good~!

Fedora中ATI显示驱动问题

发表 2008-05-30 | 分类 Linux | 评论数:
| 字数: 1.1k | 阅读 ≈ 1 分钟

Fedora9中由于Xorg版本过新的原因(刚开始我还以为是内核版本过新的原因),最新的ATI显卡驱动没办法使用,因此3D效果无法开启,在我的机子上不仅如此,而且连在runlevel 5 下使用Ctrl+ALT+F1这样切换终端都出现问题(不支援)。

忍了几天,今天终于解决掉了,我是按照这篇文章来做的,既然Xorg版本过新,那就直接换个低版本的Xorg(Linux不就有这个好处吗^_^)。

详细的我就不写出来了,说下大概过程:
首先是为系统添加Fedora8的源,可以直接下载这个文件,然后在Fedora9 yum配置文件中把xorg linuxwacom rhpxl mesa/“ 相关的软件包排除掉,卸载Xorg,重新安装一次,这时由于Fedora9中已经排除了Xorg相关的软件包,因此yum就会从Fedora8的源中安装这些包,这样就得到了downgrade的效果。

文章的最后还给出来如果恢复到系统默认Xorg的办法,这里就不提了。

现在我的Fedora9完全没有问题了,^_^

btw:记个东西,ssh到内网的电脑:
首先得有个公网的IP,然后在内网(我公司的电脑)的电脑上使用下面命令:
[cocobear@cocobear ~]$ ssh -f -N -R 1986:localhost:22 cocobear@208.113.171.94
(208.113.171.94这个IP是我网站的IP,一会儿会提到为什么用这个IP)
接着在有公网IP的电脑上登录这台内网机器:

因为我另一边要在宿舍来连公司的这台电脑,而宿舍的电脑也在内网,因此需要使用一个具有公网IP的跳板电脑,我先在宿舍ssh到我这个网站的服务器上:
[cocobear@cocobear ~]$ ssh -l cocobear cocobear.github.io
然后在服务器上连接
[crystallight]$ ssh cocobear@localhost -p 1986
呵呵,这样就可以从宿舍电脑ssh到公司了,一会儿回宿舍看看公司这边电脑东西下完了没^_^

Comments

kongove: dreamhost确实不错,上面有好多软件可以方便使用。 用w3m在上面浏览网页也不错,懒得用代理。

crazyfranc: TO DREAM: DREAMHOST 不贵的。

dream: 羡慕啊,有dreamhost很贵吧,我也很想有一个~~:)

Amankwah: 这个ssh方案好!可以对实验室不适用~

luguo: 行啊,用dreamhost做中转啊~!

1…242526…72
cocobear

cocobear

爱折腾的技术宅一枚

359 日志
8 分类
182 标签
RSS
GitHub E-Mail Twitter 豆瓣
友情链接
  • 王聪
  • 老大
0%
© 2007 – 2020 cocobear | 521k | 7:54
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v6.7.0
Hosted by GitHub Pages