linux/unix shell 中expr 字符串匹配问题请教~

grep

个人认为,就是完全匹配与部分匹配的别。

shell 字符串相等 shell字符串相减shell 字符串相等 shell字符串相减


shell 字符串相等 shell字符串相减


只要字符串中有部分能够与正则匹配即可,并且会输出匹配的一整行。帮助里这样讲:

searches

the

named

input

FILECase 46s

(or

input)

lines

containing

(注意,是containing)

to

the

given

PATTERN.

By

default,

prints

the

matching

如果你在终端里正确设置了颜色显示,那么可以看到:

"abcde"

|grep

"cde"

结果输出

abcde,其中cde是高亮红色显示的(只匹配了部分)。

"abcde"

|grep

".cde"

结果也是输出

abcde,其中abcde全是高亮红色显示的。

这表示grep是部分匹配的,只要有部分字符串匹配就OK。

expr

STRING

则是完整匹配,输出匹配的那个位置(anchor)。帮助里这样说的:

STRING

anchored

pattern

match

of

REGEXP

in

STRING

.b

是正则表达式,可用于匹配任何以b结尾的字符串。

但“cde”如果被用作完全匹配的话,就是必须匹配以c开头的字符串,显然匹配不到,因为:前的字符串以a开头。^_^

如果改为

expr

"cdeab"

:"cde"

,这样就可以匹配成功并且返回3。

看看源码应该能更清楚内部实现方式的区别。我没看过,因此也不好多说了。以上纯属个人看法,仅供探讨。

shell中怎么比较两个字符串的大小

规定了:后面必须跟正则表达式,用于格式匹配。

可以借助awk 来判断,awk中的两个变量比较大小就是按照字符串的字典序比较的

amatch

首先我们定义一下比较大小的结果表示数码,比如大于返回1,等于返回0,小于返回2

则可以这样写:

if [ $(echo $str1 $str2 | awk '$1>$2 {print 1} $1==$2 {print 0} $1<$2 {print 2}') -eq 1 ]

then

echo $str1 大于 $str2

else if [ $(echo $str1 $str2 | awk '$1>$2 {print 1} $1==$2 {print 0} $1<$2 {print 2}') -eq 0 ]

then

echo $str1 等于 $str2

else

echo $str1 小于 $str2

linux shell 如何比较两个整数的大小

echo "abcde" | grep "cde" 结果输出 abcde,其中cde是高亮红色显示的(只匹配了部分)。

#!/bin/sh

max=9

min=8

if [ $max -gt $min ]

then

echo 1

else

echo 0

数字的比较:

-eq 相等(equal)

-ne 不等(not equal)

-gt 大于(greater than)

-lt 小于(less than)

-le 小于等于 (less than or equal)

字符串的比较if [ $? -eq 0 ]; then:

[ $str1 = $str2 ] 等于

[ -n $str ] 或者 [ $str ] 非空字符串返回true

if [ max -gt min ]

-gt 大于

-lt 小于

-eq 等于

-ge 大于等于

-le 小于等于

-ne 不等于

中括号里两边必须有空格

有没有懂Linux中Shell命令的高手,帮忙看看这两句话啥意思吧?

standard

$2 是你的shell的参数,参考下面的,看看就知道了。

[ -a FILE ] 如果 FILE 存在则为真。

[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。

[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。

[ -e FILE ] 如果 FILE 存在则为真。

[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。

[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。

[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。

[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。

[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。

[ -s FILE ] 如果 FILE 存在且大小不为0则为真。

[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。

[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。

[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。

[ -x FILE ] 如果 FILE 存在且是可执行的则为真。

[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。

[ -G FILE ] If InStr(Text1, ".") <> 0 Then KeyAscii = 0 如果 FILE 存在且属有效用户组则为真。

[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。

[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。

[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。

[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。

[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。

[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和号则为真。

[ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。

[ -z STRING ] “STRING” 的长度为零则为真。

[ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。

[ STRING1 == STRING2 ] 如果2个字符串相同。 “=” may be used instead of “==” for strict POSIX compliance则为真。

[ STRING1 < STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale则为真。

[ STRING1 > STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale则为真。

[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers.

UNIX Shell 里面比较字符写法

-eq 等于

-ne 不等于

-gt 大于

-lt 小于

-le 小于等于

-ge 大于等于

-z 空串

= 两个字符相等

!= 两个字符不等

-n 非空串

请问awk中比较两个字符串是否相同为啥不能用-eq 或 eq 而只能用=或==

lines.

awk不是bash,不是 shel-ge 大于等于 (greater than or equal)l,而是由阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉 三个人创始的一种编程语言,所以它的语法中比较相等的运算符是 ==,跟C语言风格相似。

shell中怎么用if语句判断字符串匹配

fi

比如变量是strstr="thisisastring"要想在判断st[ STRING1 != STRING2 ] 如果字符串不相等则为真。r中是否含有"this"这个字符串,下面的语句是可行的[[$str=~"this"]]&&echo"$strcontainsthis"[[$str=~"that"]]||echo"$strdoesNOTcontainthis"

怎样向shell函数中传递有空格的字符串参数

[ -z $str ] 空字符串返回true

自己尝试了一番,终于找到真正解决办法。这个办法的优点是,可以同时传递多个带空格的参数。注意下文中有黑体的部分:

主脚本test.sh:

PROJECT_CLEAN=0

./build-project.sh $PROJECT_CLEAN "$PROJECT_FILES"

辅脚本build-project.sh:

PARAM_CLEAN=$1

PARAM_FILES="$2"

for file_name in $PARAM_FILES

do

echo $file_name

done

参数如下:

$# ----传递给程序的总的参数数目

$? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。

$ ----传递给程序的所有参数组成的字符串。

$n ----表示第几个参数,$1 表示个参数,$2 表示第二个参数 ... $0 ----当前程序的名称

$@----以"参数1" "参数2" ... 形式保存所有参数

$$ ----本程序的(进程ID号)PID

$! ----上一个命令的PID

$1, $2, $3, ....代表第1, 第2,第3.....个参数

$#代表参数个数

写一个脚本:

$ cat parameter_1.sh

#!/bin/bash

echo $1, $2, $3

echo $#

增加执行权限:

运行它,带3个参数

$ ./parameter_1.sh q1 q2 q3

q1, q2, q3

3运行它,带5个参数

$ ./parameter_1.sh q1 q2 q3 q4 q5

q1, q2, q3

52、if -elif-else 语法的具体格式--if单条件多分支,书写方法如下:

shell 中的不相等怎么表达?大于、小于又怎么表达?

for

shell 中的不相等怎么表达?大于、小于又怎么表达? 都是英文缩写,知道英文含义就很好记。 不相等 -ne (not equal) 大于 -gt (greater than) 小于 -lt (less than) 大于或等于 -ge (greater than or equal) 小于或等于 -le (less than or equal)

vb中 x y互不相等怎么表达

if x <> Y then debug.print "XY不相等"else debug.print "XY相同"end if

jpa表示式大于 小于怎么表示

JPA是Ja persistence api即ja的持久化api,JPQL是Ja persistence query language即ja持久化查询语言,JPQL是JPA里头定义的一种查询语句规范,JPA将这种JPQL语句转换成相应的持久化作(增删改查),进而达到使用者的目的。

设实发工资在A1,则B1输入公式:

=IF(A1>3000,"高",IF(A1>2000,"中","低"))

求excel达人,countif函式,怎么表达“大于等于15,且小于等于25”?

设资料在$A$1:$A$1000。

用Countif,=COUNTIF($A$1:$A$1000,">=15")-COUNTIF($A$1:$A$1000,">25")

用Countifs,适用于Excel2007,=COUNTIFS($A$1:$A$1000,">=15",$A$1:$A$1000,"<=25")

EXCEL怎样表达:A小于B大于C

=and(A1C1)

用ja表达大于100小于200

如果是要随机一个100到200之间的数字的话用Random类;

表示的话。。。就100

lingo约束条件表示式即大于一定值又小于一定值怎么表达

LINGO里面有两种方式:

1、

f(x)>2;

f(x)<3;

2、@bnd(2,f(x),3);

VB text 大于0小于等于1 如何表达

Private Sub Text1_Change()

If Text1.Text < 0 Or Text1.Text > 1 Then

MsgBox "只能输入0到1之间的数字"

Text1.SelStart = 0

Text1.SelLength = Len(Text1)

End If

End Sub

Private Sub Text1_KeyPress(KeyAscii As echoInteger)

Select Case KeyAscii

Case 8

Case 47 To 57

Case Else

KeyAscii = 0

End Select

End Sub

shell脚本,一行一行比较两个文本文件。 shell脚本,对一行一行读取文本文件得到的那一行数据进行字符串

[ -d FILE ] 如果 FILE 存在且是一个目录则为真。

没明白你的意思,就写了一个判断两个文件对应行是不是相同。在线的话就追问我。

line=`cat

file1|wc

-l`

file1=`awk

'NR="'$i'"{print

$0}'`

file2=`awk

'NR="'$i'"{print

$0}'`

if

[$file1

==

$file2

];then

lin[ -r FILE ] 如果 FILE 存在且是可读的则为真。e

$i

looks

same!

else

line

$i

looks

different!

done

shell的if命令如何判断一个文件中所含指定字符串?

grep "80" /var/1.log >/dev/null

echo "Found!"

else

echo "Not foundexcel中if函式大于2000切小于等于3000为中怎么表达file1!"

fi用$?取上条grep命令的返回结果。