获取第N个域及其之后的内容?

sh/bash/dash/ksh/zsh等Shell脚本
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 获取第N个域及其之后的内容?

#16

帖子 eexpress » 2012-08-27 14:10

直接perl
啥分隔符。。。都是正则分割。
● 鸣学
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 获取第N个域及其之后的内容?

#17

帖子 tusooa » 2012-08-27 14:42

eexpress 写了:直接perl
啥分隔符。。。都是正则分割。
当然用perl好。但是这里是shell脚本版。。。

代码: 全选

] ls -ld //
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 获取第N个域及其之后的内容?

#18

帖子 lilydjwg » 2012-08-27 16:04

eexpress 写了:直接perl
啥分隔符。。。都是正则分割。
Perl 版也行啊,你贴出来嘛,要保留后边内容的空格的哦。
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
联系:

Re: 获取第N个域及其之后的内容?

#19

帖子 tangboyun » 2012-08-28 9:46

[haskell]
{-# LANGUAGE OverloadedStrings #-}
module Main where

import Data.Attoparsec.Text
import Data.Attoparsec.Combinator
import Data.Char
import Control.Applicative
import qualified Data.Text.IO as TIO
import qualified Data.Text as T
import Data.Maybe
import System.Environment

myParser n = many1 $ count n (many1 (satisfy (not . isSpace)) *> many1 space) >>
fmap T.pack (manyTill anyChar endOfLine)
main :: IO ()
main = do
fmap head getArgs >>= TIO.readFile >>=
TIO.putStrLn . T.unlines . fromJust . maybeResult . flip feed "" . parse (myParser 3)
[/haskell]
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 获取第N个域及其之后的内容?

#20

帖子 tusooa » 2012-08-28 16:05

lilydjwg 写了:
ljj_jjl2008 写了:我其实很讨厌这种讨论:有这种讨论时间,够写200个程序的了。
问题是,自己写的程序携带不便啊。我工作时经常得从自己笔记本上拷个把脚本过去……
github啊。

代码: 全选

] ls -ld //
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 获取第N个域及其之后的内容?

#21

帖子 lilydjwg » 2012-08-28 16:07

tusooa 写了:
lilydjwg 写了:
ljj_jjl2008 写了:我其实很讨厌这种讨论:有这种讨论时间,够写200个程序的了。
问题是,自己写的程序携带不便啊。我工作时经常得从自己笔记本上拷个把脚本过去……
github啊。
不想用 github 管理一堆十几行甚至几行的代码,大部分还只有自己用得着。
而且对方不一定有 git,wget 还得让它不要校验证书。
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: 获取第N个域及其之后的内容?

#22

帖子 Methuselar » 2012-08-28 22:13

eexpress 写了:直接perl
啥分隔符。。。都是正则分割。
要玩正则,egrep足矣... perl太浪费
Mea Culpa!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 获取第N个域及其之后的内容?

#23

帖子 eexpress » 2012-08-28 22:24

代码: 全选

● echo 'AAA BBB     CCC         DDD dd DdDd'|perl -pe '/\ {8,}/;$_=$`;'
其实这样最简单。只是,$'居然写了,bash不认。只好写成了$`。写脚本里面,肯定没问题。

代码: 全选

● echo 'AAA BBB     CCC         DDD dd DdDd'|perl -pe '@_=split /\ +/;print "@_[3,4,5]\n";'
这是常规写法。

关键在于你找出特征。没特征,那就呆写。
● 鸣学
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 获取第N个域及其之后的内容?

#24

帖子 eexpress » 2012-08-28 22:30

● echo 'AAA BBB CCC DDD dd DdDd'|perl -pe '@_=split /\ +/;$_=join " ",@_[3,4,5];'
也可以。
● 鸣学
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: 获取第N个域及其之后的内容?

#25

帖子 Methuselar » 2012-08-28 22:37

eexpress 写了:

代码: 全选

● echo 'AAA BBB     CCC         DDD dd DdDd'|perl -pe '/\ {8,}/;$_=$`;'
其实这样最简单。只是,$'居然写了,bash不认。只好写成了$`。写脚本里面,肯定没问题。

代码: 全选

● echo 'AAA BBB     CCC         DDD dd DdDd'|perl -pe '@_=split /\ +/;print "@_[3,4,5]\n";'
这是常规写法。

关键在于你找出特征。没特征,那就呆写。
你的常规写法,要是有1024列,就写[3,4,5,6,7...1024]?? perl里应该有cut -f3-那样用法的,就像lz说的py那样. 而且你也没保留空格个数。
Mea Culpa!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 获取第N个域及其之后的内容?

#26

帖子 lilydjwg » 2012-08-28 22:42

Methuselar 写了:
eexpress 写了:

代码: 全选

● echo 'AAA BBB     CCC         DDD dd DdDd'|perl -pe '/\ {8,}/;$_=$`;'
其实这样最简单。只是,$'居然写了,bash不认。只好写成了$`。写脚本里面,肯定没问题。

代码: 全选

● echo 'AAA BBB     CCC         DDD dd DdDd'|perl -pe '@_=split /\ +/;print "@_[3,4,5]\n";'
这是常规写法。

关键在于你找出特征。没特征,那就呆写。
你的常规写法,要是有1024列,就写[3,4,5,6,7...1024]?? perl里应该有cut -f3-那样用法的,就像lz说的py那样. 而且你也没保留空格个数。
他的第一个倒是很不错,只是不知道性能如何。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 获取第N个域及其之后的内容?

#27

帖子 eexpress » 2012-08-28 22:56

lilydjwg, 你应该说出实例。别模糊的说。后期是不是还要处理输出,等等。
列出几行数据,找出特征

省得破酷胖,老说你一定要保留空格。这不傻嘛。谁后期需要处理的数据,还要固定空格。直接\t就是。就算输出到conky那种破软件,也可以\t嘛。
而且,要说明你这是不是作业,还是真正处理数据。省得别人说你这要求很傻。


:em04

代码: 全选

'@_=split /\ +/;$_=join " ",@_[3..5];'
另外,省得他说,要写3,4,5,,,,,,1024

代码: 全选

'@_=split /\ +/;$_=@_;$_=join " ",@_[3..$_];'
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 获取第N个域及其之后的内容?

#28

帖子 lilydjwg » 2012-08-28 23:35

eexpress 写了:lilydjwg, 你应该说出实例。别模糊的说。后期是不是还要处理输出,等等。
列出几行数据,找出特征

省得破酷胖,老说你一定要保留空格。这不傻嘛。谁后期需要处理的数据,还要固定空格。直接\t就是。就算输出到conky那种破软件,也可以\t嘛。
而且,要说明你这是不是作业,还是真正处理数据。省得别人说你这要求很傻。


:em04

代码: 全选

'@_=split /\ +/;$_=join " ",@_[3..5];'
另外,省得他说,要写3,4,5,,,,,,1024

代码: 全选

'@_=split /\ +/;$_=@_;$_=join " ",@_[3..$_];'
我又不是学生,写什么作业 = = 也没那么宽的屏放 1024 列数据 = =
是这样子的,这次我要取 netstat -npt 的数据,其中进程名部分经常有空格。我要保留这部分的空白,虽然说一般是只有一个空格,但是谁知道呢。
特征我已经说了,和 Python split 的第二个参数一样的功能,在指定列之后的空白都算数据不算分隔符。
别管后期,Unix 风格是松耦合嘛。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 获取第N个域及其之后的内容?

#29

帖子 eexpress » 2012-08-29 14:27

这就好。我都猜对了。我就说了,肯定是在外面,解释某些命令的输出。
酷胖说你的是作业。
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 获取第N个域及其之后的内容?

#30

帖子 lilydjwg » 2012-08-29 14:46

eexpress 写了:这就好。我都猜对了。我就说了,肯定是在外面,解释某些命令的输出。
酷胖说你的是作业。
酷胖是什么东西? :em23
回复