如何在sprintf函数中输出百分号等特殊符号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在sprintf函数中输出百分号等特殊符号相关的知识,希望对你有一定的参考价值。

php中的sprinf可以格式化字符串的数据类型。今天遇到了想在其中输出%,可难倒我了。

$query = sprintf("select * from books where %s like \'% %s %\'",$searchtype,$searchterm);

//我以为输出是这样的:select * from books where title like \'% java %\' ,但实际上输出会是select * from books where title like \'%

将其换成这样就可以了:

$query = sprintf("select * from books where %s like \'%%%s%%\'",$searchtype,$searchterm);

//其中的%%中的第一个%用来转译特殊字符。
参考技术A 用转义字符。例如 百分号 用两个百分号 %% 双引号 用反斜杠双引号。
也可以用%c 输出 字符常量(或 ASCII值)。
#include <stdio.h>
#include <time.h>
int main()
char s[80];
sprintf(s,"%% \""); // 转义字符方法
printf("%s\n",s);
sprintf(s,"%c %c",'%','"'); // 字符常量方法
printf("%s\n",s);
return 0;
参考技术B 通常是用来按照一定的格式,给字符窜赋值的,像charbuf[100]=0;chars1[10]="helloworld";chars2[10]="Tom";sprintf(buf,"zifuchuanis%s,heint%s",,s1,s2);printf("buf=[%s]",buf);//输出是,也就是buf变成"zifuchuanishelloworld,heintTom"同样适合一些int类型,intint1=10像sprintf(buf,"%s,%s,%d",s1,s2,int1);这样得出的字符串是"hellowolrdTom10"

特殊符号管道符命令:cutsortuniqwcteetrsplit等命令

特殊符号
  • *任意个任意字符
  • ?任意一个字符
  • #注释字符
  • \脱义字符
  • |管道符
  • $变量前缀, !$组合,正则里面表示行尾
  • ;多条命令写到一行,用分号分隔
  • ~用户家目录,后面正则表达式中表示匹配符
  • &放到命令后面,会把命令丢到后台
  • > >> 2> 2>> &>:输出重定向、追加重定向、错误输出重定向、错误追加重定向、不区分重定向;
  • 【】方括号表示指定字符中的一个,【0-9】,【a-zA-Z】,【abc】;
  • ||和&& 判断语句,用于命令之间;(|| 或的意思 ls 1.txt || ls 2.txt 如果执行ls 1.txt成功 就不会执行ls 2.txt)
    (&& 是and的意思 ls 1.txt && ls 2.txt 表示 如果ls 1.txt 执行成功 才会执行 ls 2.txt)

实验1:||符号;
当ls 1.txt这个条件生效,那么就忽略ls 2.txt这个命令;
当ls 3.txt 这个条件不生效,那么执行后面ls 2.txt这条命令;

[[email protected] test]# ls
1.txt  2.txt  a.txt
[[email protected] test]# ls 1.txt || ls 2.txt
1.txt
[[email protected] test]# ls 3.txt || ls 2.txt
ls: 无法访问3.txt: 没有那个文件或目录
2.txt
[[email protected] test]#

实验2:&&and命令;
当第一条命令错误,全部命令失效;
当第一条命令成功,再来执行第二条命令;

[[email protected] test]# ls 3.txt && ls 2.txt
ls: 无法访问3.txt: 没有那个文件或目录
[[email protected] test]# ls 1.txt && ls 2.txt
1.txt
2.txt
[[email protected] test]#

管道符命令

cut命令:

作用:截取文件部分显示,-d分隔符 -f指定段数 -c指定第几个字符;
显示passwd文档的前两段,截取:之前的1段;
cat /etc/passwd |head -2 |cut -d ":" -f 1

[[email protected] ~]# cat /etc/passwd |head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[[email protected] ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1
root
bin
[[email protected] ~]#

显示passwd文档前两段,截取:之前的1到2段显示出来;
cat /etc/passwd |head -2 |cut -d ":" -f 1,2

[[email protected] test]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2
root:x
bin:x
[[email protected] test]#
显示passwd文档   前两段    截取:之前的    1-3段
cat /etc/passwd |head -2 |cut -d ":" -f 1-3
[[email protected] test]# cat /etc/passwd |head -2 |cut -d ":" -f 1-3
root:x:0
bin:x:1
[[email protected] test]#

sort命令:

作用:排序显示;

  • -n:以数字排序 ;
  • -r:反序;
  • -t: 分隔符;
  • -kn1/-kn1,n2:指定范围;

将psswd 按ACISS编码排序从a-z顺序;
sort /etc/passwd

[[email protected] ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
user005:x:1008:1005::/home/user005:/bin/bash
user007:x:1007:1005::/home/user007:/bin/bash
user01:x:1000:1000::/home/user01:/bin/bash
user02:x:1001:1001::/home/user02:/bin/bash
[[email protected] ~]#

wc命令

作用:统计文件行数、字数;

  • -l: 统计文件行数;
  • -m:统计字符数(换行符也会计算在内)
  • -w:统计词 (空白作为分隔)

统计/etc/passwd 有多少行
wc -l /etc/passwd

[[email protected] ~]# wc -l /etc/passwd
23 /etc/passwd
[[email protected] ~]#

uniq命令

作用:去重复(去重复内容只限于相邻段),配合sort排序然后再去重复,-c 统计行数;
实验1:不排序去重复;

[[email protected] abc]# cat 2.txt
abc
222
abc
111
111
[[email protected] abc]# uniq 2.txt
abc
222
abc
111
[[email protected] abc]#

实验2:排序去重复;

[[email protected] abc]# cat 2.txt
abc
222
abc
111
111
[[email protected] abc]# sort 2.txt | uniq
111
222
abc
[[email protected] abc]#

tee命令

作用:相当于>命令,也就是输出重定向,但是可以显示;
参数-a:追加;
比如:cat 2.txt >a.txt 是不显示将2.txt文件输出到a.txt;

[[email protected] abc]# cat 2.txt > a.txt
[[email protected] abc]# cat a.txt
abc
222
abc
111
111
[[email protected] abc]#

实验1:使用tee命令,输出到a.txt;
cat 2.txt | tee a.txt

[[email protected] abc]# cat 2.txt | tee a.txt
abc
222
abc
111
111
[[email protected] abc]# cat a.txt
abc
222
abc
111
111
[[email protected] abc]#

实验2:追加到a.txt文件中;

[[email protected] abc]# cat a.txt
abc
222
abc
111
111
[[email protected] abc]# cat 2.txt | tee -a a.txt
abc
222
abc
111
111
[[email protected] abc]# cat a.txt
abc
222
abc
111
111
abc
222
abc
111
111
[[email protected] abc]#

tr命令

作用:替换命令;
实验:将输出的字符串abclinux中的abc替换为123并输出;

[[email protected] test]# echo "abclinux"
abclinux
[[email protected] test]# echo "abclinux" | tr ‘abc‘ ‘123‘
123linux
[[email protected] test]#

split命令

作用:切割命令,将一个大的文件分割成多个文件;-b大小(默认单位字节),-l 行数;
实验1:按大小来分割文件;
split -b 100k a.txt

[[email protected] test]# ls
a.txt  xaa  xab
[[email protected] test]# wc -l a.txt
6359 a.txt
[[email protected] test]# rm -rf x*
[[email protected] test]# ls
a.txt
[[email protected] test]# split -b 100k a.txt
[[email protected] test]# ls
a.txt  xaa  xab  xac
[[email protected] test]# du -sh *
244K    a.txt
100K    xaa
100K    xab
44K    xac
[[email protected] test]#

实验2:按行数来分割文件;
split -l 1000 a.txt

[[email protected] test]# ls
a.txt
[[email protected] test]# wc -l a.txt
6359 a.txt
[[email protected] test]# split -l 1000 a.txt
[[email protected] test]# ls
a.txt  xaa  xab  xac  xad  xae  xaf  xag
[[email protected] test]# wc -l *
  6359 a.txt
  1000 xaa
  1000 xab
  1000 xac
  1000 xad
  1000 xae
  1000 xaf
   359 xag
12718 总用量
[[email protected] test]#

以上是关于如何在sprintf函数中输出百分号等特殊符号的主要内容,如果未能解决你的问题,请参考以下文章

sprintf函数中的格式 "%%0%dd" 是啥意思?

特殊符号管道符命令:cutsortuniqwcteetrsplit等命令

如何使用sprintf格式化R中数据框的打印?

url地址中 "&" "/"等符号的转义处理

URL中%2F,%2B等特殊字符

sprintf()函数的用法