分页: 2 / 3
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-27 14:10
由 eexpress
直接perl
啥分隔符。。。都是正则分割。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-27 14:42
由 tusooa
eexpress 写了:直接perl
啥分隔符。。。都是正则分割。
当然用perl好。但是这里是shell脚本版。。。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-27 16:04
由 lilydjwg
eexpress 写了:直接perl
啥分隔符。。。都是正则分割。
Perl 版也行啊,你贴出来嘛,要保留后边内容的空格的哦。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 9:46
由 tangboyun
[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]
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 16:05
由 tusooa
lilydjwg 写了:ljj_jjl2008 写了:我其实很讨厌这种讨论:有这种讨论时间,够写200个程序的了。
问题是,自己写的程序携带不便啊。我工作时经常得从自己笔记本上拷个把脚本过去……
github啊。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 16:07
由 lilydjwg
tusooa 写了:lilydjwg 写了:ljj_jjl2008 写了:我其实很讨厌这种讨论:有这种讨论时间,够写200个程序的了。
问题是,自己写的程序携带不便啊。我工作时经常得从自己笔记本上拷个把脚本过去……
github啊。
不想用 github 管理一堆十几行甚至几行的代码,大部分还只有自己用得着。
而且对方不一定有 git,wget 还得让它不要校验证书。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 22:13
由 Methuselar
eexpress 写了:直接perl
啥分隔符。。。都是正则分割。
要玩正则,egrep足矣... perl太浪费
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 22:24
由 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";'
这是常规写法。
关键在于你找出特征。没特征,那就呆写。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 22:30
由 eexpress
● echo 'AAA BBB CCC DDD dd DdDd'|perl -pe '@_=split /\ +/;$_=join " ",@_[3,4,5];'
也可以。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 22:37
由 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那样. 而且你也没保留空格个数。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 22:42
由 lilydjwg
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那样. 而且你也没保留空格个数。
他的第一个倒是很不错,只是不知道性能如何。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 22:56
由 eexpress
lilydjwg, 你应该说出实例。别模糊的说。后期是不是还要处理输出,等等。
列出几行数据,
找出特征。
省得破酷胖,老说你一定要保留空格。这不傻嘛。谁后期需要处理的数据,还要固定空格。直接\t就是。就算输出到conky那种破软件,也可以\t嘛。
而且,要说明你这是不是作业,还是真正处理数据。省得别人说你这要求很傻。
代码: 全选
'@_=split /\ +/;$_=join " ",@_[3..5];'
另外,省得他说,要写3,4,5,,,,,,1024
代码: 全选
'@_=split /\ +/;$_=@_;$_=join " ",@_[3..$_];'
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-28 23:35
由 lilydjwg
eexpress 写了:lilydjwg, 你应该说出实例。别模糊的说。后期是不是还要处理输出,等等。
列出几行数据,
找出特征。
省得破酷胖,老说你一定要保留空格。这不傻嘛。谁后期需要处理的数据,还要固定空格。直接\t就是。就算输出到conky那种破软件,也可以\t嘛。
而且,要说明你这是不是作业,还是真正处理数据。省得别人说你这要求很傻。
代码: 全选
'@_=split /\ +/;$_=join " ",@_[3..5];'
另外,省得他说,要写3,4,5,,,,,,1024
代码: 全选
'@_=split /\ +/;$_=@_;$_=join " ",@_[3..$_];'
我又不是学生,写什么作业 = = 也没那么宽的屏放 1024 列数据 = =
是这样子的,这次我要取 netstat -npt 的数据,其中进程名部分经常有空格。我要保留这部分的空白,虽然说一般是只有一个空格,但是谁知道呢。
特征我已经说了,和 Python split 的第二个参数一样的功能,在指定列之后的空白都算数据不算分隔符。
别管后期,Unix 风格是松耦合嘛。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-29 14:27
由 eexpress
这就好。我都猜对了。我就说了,肯定是在外面,解释某些命令的输出。
酷胖说你的是作业。
Re: 获取第N个域及其之后的内容?
发表于 : 2012-08-29 14:46
由 lilydjwg
eexpress 写了:这就好。我都猜对了。我就说了,肯定是在外面,解释某些命令的输出。
酷胖说你的是作业。
酷胖是什么东西?
