LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: coxswain

请一位象棋爱好者来用awk和sed与我对弈

[复制链接]
 楼主| 发表于 2008-5-5 23:36:26 | 显示全部楼层
Post by skycleaner;1845942
lz太牛了,呵呵,不过建议还是不要写成xyz 123的形式,还是用汉字比较直观,
编码的问题应该没关系吧

用汉字当然好看了,但我试过,真的不行,不信你用cut切一下,不好使。
回复 支持 反对

使用道具 举报

发表于 2008-5-7 21:13:52 | 显示全部楼层
  1. awk -F '' -v OFS='' 'NR==9{$6=$2;$2="+"};1'
复制代码

车+象仕将仕象马车
+++++++++
+泡马++++泡+
卒+卒+卒+卒+卒
+++++++++
楚河     汉界
+++++++++
兵+兵+兵+兵+兵
+++++炮+炮+
+++++++++
車馬相士帅士相馬車

多走几步后,写表达式就不容易了(因为有表达式不重复的要求)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-8 14:56:43 | 显示全部楼层
楼上:用汉字不行的,你写的在我mlterm上显示不正常。所以,只能用alnum棋盘。
回复 支持 反对

使用道具 举报

发表于 2008-5-10 16:41:36 | 显示全部楼层
Post by coxswain;1847129
楼上:用汉字不行的,你写的在我mlterm上显示不正常。所以,只能用alnum棋盘。


可能是配置不同造成的

在我的系统中(mlterm)显示是正常的

$ locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

$ awk --version
GNU Awk 3.1.5
Copyright (C) 1989, 1991-2005 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

$ bash --version
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-12 03:46:54 | 显示全部楼层
重新试了一下,显示正常了,不知道第一次用是怎么回事,我继续了:
# sed 'N;/车\n/c ++象仕将仕象马车\n车++++++++'

++象仕将仕象马车
车++++++++
+泡马++++泡+
卒+卒+卒+卒+卒
+++++++++
楚河     汉界
+++++++++
兵+兵+兵+兵+兵
+++++炮+炮+
+++++++++
車馬相士帅士相馬車
回复 支持 反对

使用道具 举报

发表于 2008-5-12 21:16:40 | 显示全部楼层
Post by springwind426;1846891

  1. awk -F '' -v OFS='' 'NR==9{$6=$2;$2="+"};1'
复制代码


车+象仕将仕象马车
+++++++++
+泡马++++泡+
卒+卒+卒+卒+卒
+++++++++
楚河     汉界
+++++++++
兵+兵+兵+兵+兵
+++++炮+炮+
+++++++++
車馬相士帅士相馬車

多走几步后,写表达式就不容易了(因为有表达式不重复的要求)

是指模式不能重复,还是指只要文字表达式不同就及格。如s/马/兵/ 和s/马/象/是同一个模式,但不同的表达。如果后者是许可的,即这是一个非常适合awk的游戏。一个横9X纵10的点阵吧,每一步,刷新两个点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-13 02:20:50 | 显示全部楼层
Post by zswlb9999;1848795
是指模式不能重复,还是指只要文字表达式不同就及格。如s/马/兵/ 和s/马/象/是同一个模式,但不同的表达。如果后者是许可的,即这是一个非常适合awk的游戏。一个横9X纵10的点阵吧,每一步,刷新两个点。

当然是指模式不能重复,如果模式重复就没有意义了,比如,当用了一次 s/马/兵/ 之后,下次就不要用单纯的s替换模式了,如果一定要再用 s替换的话,表达式中应包含了其它的新模式与之相结合,原有的s替换可作为辅助模式,而每次的新模式才是一个新的表达式的价值所在。这里所说的“模式”除了指awk & sed & bash中的基本指令、数据类型、内置函数以外,也包括独创性的编程思路,当然要尽量写得简短,浓缩在一个命令行之内。
回复 支持 反对

使用道具 举报

发表于 2008-5-13 21:22:00 | 显示全部楼层
  1. sed '9s/+/馬/3;11s/馬/+/' 5
  2. ++象仕将仕象马车
  3. 车++++++++
  4. +炮马++++炮+
  5. 卒+卒+卒+卒+卒
  6. +++++++++
  7. 楚河     汉界
  8. +++++++++
  9. 兵+兵+兵+兵+兵
  10. ++馬++炮+炮+
  11. +++++++++
  12. 車+相士帅士相馬車
复制代码

把 泡  改过来了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-14 08:20:55 | 显示全部楼层
别改泡行吗?炮是可以过界的,如果双方都是同一种炮,你不怕弄得眼晕啊 ?
那不是我写的错字,那是我用心良苦作的区分!如果论坛支持颜色,我就不用这么搞了。

awk '{sub(/车++/,"+++++车+++");print}'  

++象仕将仕象马车
+++++车+++
+泡马++++泡+
卒+卒+卒+卒+卒
+++++++++
楚河     汉界
+++++++++
兵+兵+兵+兵+兵
++馬++炮+炮+
+++++++++
車+相士帅士相馬車
回复 支持 反对

使用道具 举报

发表于 2008-5-14 16:24:23 | 显示全部楼层
  1. sed -rn 'N;/\n車/!{P;D};s/+/士/5;s/士相/+相/;p'
  2. ++象仕将仕象马车
  3. +++++车+++
  4. +泡马++++泡+
  5. 卒+卒+卒+卒+卒
  6. +++++++++
  7. 楚河     汉界
  8. +++++++++
  9. 兵+兵+兵+兵+兵
  10. ++馬++炮+炮+
  11. ++++士++++
  12. 車+相士帅+相馬車
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表