概要:分别的作用

grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤。

sed:stream editor 文本编辑工具;(流编辑器),擅长取行、替换。

awk:linux上的实现gawk,文件报告生成器;(独立的编程语言),过滤内容,擅长取列。

find:linux上实时查找工具,通过便利指定路径下得文件系统完成文件查找。

一、grep

    文本过滤(模式:pattern)工具,grep,egrep,fgrep

    文本搜索工具,根据用户指定的模式对目标文本逐行进行匹配检查,打印匹配到的行;

  1、模式

    由正则表达式字符及文本字所编写的过滤条件

    grep [OPTIONS] PATTERN[FILE]

  2、选项

    --color=auto:对匹配到的我那本着色显示;

    -v:显示不能够陪pattern匹配到的行;

    -i:忽略字符大小写;

    -o:仅显示匹配到的字符串;

    -q:静默模式,不输出任何信息;

    -A#:after,匹配到的后#行,就是显示匹配还显示该行之前得num行

    -B#:before,前#行,还显示该行之后得num行

    -C#context,前后各#行 ,还显示该行前后各num行

    -E:使用ERE;扩展正则表达式,egrep=grep -E

    -F:相当于fgrep

  3、正则表达式

    基于正则表达式元字符:

      1)、字符匹配:

        .: 匹配任意单个字符;
        []: 匹配指定范围内的任意单个字符
        [^]:匹配指定范围外的任意单个字符
        专用字符集合

          [:digit:]:任意数字,相当于0-9

          [:lower:]:所有的小写字符

          [:upper:]:大写字符

          [:alpha:]:大小写

          [:alnum:]:数字和字符

          [:punct:]:标点符号

          [:space:]:空格

          [:graph:] 可打印的非空白字符
        

        grep 's..n' /etc/passwd
        grep '...t' /etc/passwd
        grep'[[:alpha:]][[:alpha:]][[:alpha:]]t' /etc/passwd这样写太难受了,可以用匹配次数

      2)、匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;
        *:匹配前面的字符任意次;仅表示次数

          nano grep.txt
            xxxxxxy
          grep "x*y" grep.txt,这就是贪婪模式,如果只有x是不可以的,x可以没有也可以出现多行

        贪婪模式
          .*:任意长度的任意字符;
            


          \?:匹配其前面的字符0或1次;即前面的可有可无;

            


          \+:匹配其前面的字符至少1次;


          \{m\}:匹配前面的字符m次;
            


          \{m,n\}:匹配前面的字符至少m次,至多n次;

          \{0,n\}:匹配前面的字符至多n次;

          \{m,\}:匹配前面的字符至少m次;

    3)、位置锚定:
      ^:行首锚定;用于模式的最左侧;
      
      $:行尾锚定;用于模式的最右侧;
     
      ^PATTERN$: 用于模式匹配整行;


      ^$: 空行;
      ^[[:space:]]*$这个空白是可以没有的应为有*号

      \< 或 \b:词首锚定;用于单词模式的左侧;单词的最左侧

      \> 或 \b:词尾锚定;用于单词模式的右侧;

      \<PATTERN\>:匹配整个单词;

     分组:

      \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理
        \(xy\)*ab
        nano grep.txt
        xyxyxyxy
        grep "\(xy\)+" 如果没有小括号,则代表x后面至少一个y


      Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
        \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
        \(ab\+\(xy\)*\):
        \1: ab\+\(xy\)*这个\是和前面的有括号匹配
        \2: xy
        当我们想后续内容与前面模式匹配到的语言,则需要使用引用,即后向引用
      后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)
        grep '[[:alpha:]]'\{1,3\}t\>' /etc/passwd
        grep '[[:alpha:]]'\{1,3\}t\>'.*'[[:alpha:]]'\{1,3\}t /etc/passwd 观察,有前后不一致的
        grep '[[:alpha:]]'\{1,3\}t\>'.*\1' /etc/passwd 现在观察匹配的相同的一定是一样的

    扩展正则表达式:

      基于正则表达式而言扩展正则表达式在某些参数上可以不使用转义符(\),在使用方式上没有区别

        1)、字符匹配

          .

          []

          [^]

        2)、次数匹配

          *

           ?:0或1次

          +:1次或多次

          {m}:匹配m次

          {m,n}:至少m至多n次

        3)、锚定

          ^

          $

          \<,\b

          \>,\b

          分组

          ()

          后向引用:\1,\2...

          或者 a|b

        

  4、实例

    实例1、显示/proc/meminfo文件中以大小s开头得行

 1 [root@web2 keepalived]# grep -i "^[Ss]" /proc/meminfo
2 SwapCached: 0 kB
3 SwapTotal: 3933180 kB
4 SwapFree: 3933180 kB
5 Shmem: 92032 kB
6 Slab: 131744 kB
7 SReclaimable: 86092 kB
8 SUnreclaim: 45652 kB
9 [root@web2 keepalived]# grep -i "^s" /proc/meminfo
10 SwapCached: 0 kB
11 SwapTotal: 3933180 kB
12 SwapFree: 3933180 kB
13 Shmem: 92032 kB
14 Slab: 131752 kB
15 SReclaimable: 86092 kB
16 SUnreclaim: 45660 kB
17 [root@web2 keepalived]# grep "^[Ss]" /proc/meminfo
18 SwapCached: 0 kB
19 SwapTotal: 3933180 kB
20 SwapFree: 3933180 kB
21 Shmem: 92032 kB
22 Slab: 131752 kB
23 SReclaimable: 86092 kB
24 SUnreclaim: 45660 kB
25 [root@web2 keepalived]# grep "^s\|^S" /proc/meminfo
26 SwapCached: 0 kB
27 SwapTotal: 3933180 kB
28 SwapFree: 3933180 kB
29 Shmem: 92032 kB
30 Slab: 131752 kB
31 SReclaimable: 86092 kB
32 SUnreclaim: 45660 kB
33 [root@web2 keepalived]#

    实例2、显示/etc/passwd文件中不以/bin/bash结尾行

 [root@web2 keepalived]# grep -v "/bin/bash"$ /etc/passwd
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-bus-proxy:x:::systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
unbound:x:::Unbound DNS resolver:/etc/unbound:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
libstoragemgmt:x:::daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:::Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:::User for colord:/var/lib/colord:/sbin/nologin
usbmuxd:x:::usbmuxd user:/:/sbin/nologin
saslauth:x:::Saslauthd user:/run/saslauthd:/sbin/nologin
geoclue:x:::User for geoclue:/var/lib/geoclue:/sbin/nologin
rtkit:x:::RealtimeKit:/proc:/sbin/nologin
rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:::Anonymous NFS User:/var/lib/nfs:/sbin/nologin
radvd:x:::radvd user:/:/sbin/nologin
qemu:x:::qemu user:/:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
chrony:x::::/var/lib/chrony:/sbin/nologin
setroubleshoot:x::::/var/lib/setroubleshoot:/sbin/nologin
sssd:x:::User for sssd:/:/sbin/nologin
pulse:x:::PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x::::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x::::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:::Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
tcpdump:x::::/:/sbin/nologin
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:::MariaDB Server:/var/lib/mysql:/sbin/nologin
[root@web2 keepalived]#

    实例3、显示/etc/passwd文件中ID号最大得用户的用户名

 [root@web1 keepalived]# sort -t: -k3 -n /etc/passwd |tail -1 |cut -d: -f1
nfsnobody
[root@web1 keepalived]#

    实例4、如果用户root存在,显示其默认的shell程序

 [root@web1 keepalived]# id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7
/bin/bash
[root@web1 keepalived]#

    实例5、找出/etc/passwd中的两位或三位数

 [root@web1 keepalived]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-bus-proxy:x:::systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
unbound:x:::Unbound DNS resolver:/etc/unbound:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
libstoragemgmt:x:::daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:::Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:::User for colord:/var/lib/colord:/sbin/nologin
usbmuxd:x:::usbmuxd user:/:/sbin/nologin
saslauth:x:::Saslauthd user:/run/saslauthd:/sbin/nologin
geoclue:x:::User for geoclue:/var/lib/geoclue:/sbin/nologin
rtkit:x:::RealtimeKit:/proc:/sbin/nologin
rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin
radvd:x:::radvd user:/:/sbin/nologin
qemu:x:::qemu user:/:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
chrony:x::::/var/lib/chrony:/sbin/nologin
setroubleshoot:x::::/var/lib/setroubleshoot:/sbin/nologin
sssd:x:::User for sssd:/:/sbin/nologin
pulse:x:::PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x::::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x::::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:::Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
tcpdump:x::::/:/sbin/nologin
zhangxingeng:x:::centos--:/home/zhangxingeng:/bin/bash
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
lightdm:x::::/var/lib/lightdm:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
redis:x:::Redis Database Server:/var/lib/redis:/sbin/nologin
mysql:x:::MariaDB Server:/var/lib/mysql:/sbin/nologin
[root@web1 keepalived]#

    实例6、显示/etc/rc.d/rc.sysinit文件中,至少一个空白字符开头的且后面存非空白字符的行

 [root@web1 keepalived]# grep "^[[:space:]]\+[[:graph:]]" /etc/grub2.cfg
load_env
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
set default="${saved_entry}"
menuentry_id_option="--id"
menuentry_id_option=""
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
set timeout_style=menu
set timeout=
set timeout=
source ${prefix}/user.cfg
if [ -n "${GRUB2_PASSWORD}" ]; then
set superusers="root"
export superusers
password_pbkdf2 root ${GRUB2_PASSWORD}
fi
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' a9392b0d-ae01-41ce-b4a0-efb843235bfe
else
search --no-floppy --fs-uuid --set=root a9392b0d-ae01-41ce-b4a0-efb843235bfe
fi
linux16 /vmlinuz-3.10.-.el7.x86_64 root=UUID=11b66499-c82b-476f--fc3690a4e26d ro crashkernel=auto rhgb quiet LANG=en_US.UTF-
initrd16 /initramfs-3.10.-.el7.x86_64.img
load_video
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' a9392b0d-ae01-41ce-b4a0-efb843235bfe
else
search --no-floppy --fs-uuid --set=root a9392b0d-ae01-41ce-b4a0-efb843235bfe
fi
linux16 /vmlinuz--rescue-b7671beb75f14e95b5a58975dae3a897 root=UUID=11b66499-c82b-476f--fc3690a4e26d ro crashkernel=auto rhgb quiet
initrd16 /initramfs--rescue-b7671beb75f14e95b5a58975dae3a897.img
source ${config_directory}/custom.cfg
source $prefix/custom.cfg;
[root@web1 keepalived]#

    实例7、找出“netstat -tan”命令的结果以LISTEN后跟0、1或多个空白字符结尾

 [root@web1 keepalived]# netstat -tan | grep "LISTEN[[:space:]]*$"
tcp 0.0.0.0: 0.0.0.0:* LISTEN
tcp 0.0.0.0: 0.0.0.0:* LISTEN
tcp 192.168.122.1: 0.0.0.0:* LISTEN
tcp 0.0.0.0: 0.0.0.0:* LISTEN
tcp 127.0.0.1: 0.0.0.0:* LISTEN
tcp 127.0.0.1: 0.0.0.0:* LISTEN
tcp6 ::: :::* LISTEN
tcp6 ::: :::* LISTEN
tcp6 ::: :::* LISTEN
tcp6 ::: :::* LISTEN
tcp6 ::: :::* LISTEN
[root@web1 keepalived]#

    实例8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;

 [root@web1 keepalived]# cat /etc/passwd | grep "\(^[[:alnum:]]\+\>\).*\<\1$" 
[root@web1 keepalived]# useradd bash
[root@web1 keepalived]# useradd testbash
[root@web1 keepalived]# useradd basher
[root@web1 keepalived]# useradd -s /sbin/nologin nologin
[root@web1 keepalived]# grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
bash:x::::/home/bash:/bin/bash
nologin:x::::/home/nologin:/sbin/nologin
[root@web1 keepalived]#

    #谋定所有得数字和字符,至少出现一个所以用+,谋定整个单词词尾,然后()括号做分组,.*中间跟上任意内容,\1$结尾跟括号内一致

  egrep实例

    实例9、显示当前系统root、centos或user1用户的默认shell和UID;

 [root@web1 keepalived]# grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d: -f 1,3,7
root::/bin/bash
[root@web1 keepalived]#

    实例10、找出/etc/rc.d/init.d/functions文件中某单词后跟一个小括号的行

 [root@web1 keepalived]# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions
checkpid()
__kill_pids_term_kill_checkpids()
__kill_pids_term_kill()
__pids_var_run()
__pids_pidof()
daemon()
killproc()
pidfileofproc()
pidofproc()
status()
echo_success()
echo_failure()
echo_passed()
echo_warning()
update_boot_stage()
success()
failure()
passed()
warning()
action()
strstr()
is_ignored_file()
is_true()
is_false()
apply_sysctl()
[root@web1 keepalived]#

      #_这个是连字符,+至少出现一次\(\)显示()本身

    实例11、使用echo输出一绝对路径,使用egrep取出其基名

 [root@web1 keepalived]#  echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1
sdc
[root@web1 keepalived]#

    实例12、找出ifconfig命令结果中1-255之间的数值,这里分别表是0-9、10-99、100-199、200-249、250-255

1 echo {1..1000} | egrep -o "\b[0-9]\b" | tr "\n" " " ;echo
2 echo {1..1000} | egrep -o "\b[0-9]{2}\b" | tr "\n" " " ;echo
3 echo {1..1000} | egrep -o "\b1[0-9]{2}\b" | tr "\n" " " ;echo
4 echo {1..1000} | egrep -o "\b2[0-4][0-9]\b" | tr "\n" " " ;echo
5 echo {1..1000} | egrep -o "\b25[0-5]\b" | tr "\n" " " ;echo 

    实例13、找出ifconfig命令结果中的IP地址

 [root@web1 keepalived]# ifconfig|egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
255.255.255.0
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255
[root@web1 keepalived]#

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10789761.html 

简单介绍shell编程四剑客之grep的更多相关文章

  1. 简单介绍shell编程四剑客之awk

    概要:分别的作用 grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤. sed:stream editor 文本编辑工具:(流编辑器),擅长取行.替换. awk ...

  2. 简单介绍shell编程四剑客之sed

    概要:分别的作用 grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤. sed:stream editor 文本编辑工具:(流编辑器),擅长取行.替换. awk ...

  3. shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)

    一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...

  4. Shell编程四剑客包括:find、sed、grep、awk

    一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...

  5. linux shell编程学习笔记(二) --- grep命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  6. shell编程(四)之循环控制语句(for,while,until,break,continue,case)

    for循环 语法:for NAME in LIST; do 循环体 done 列表生成方式:1.整数列表 {start...end} $(seq,[start [step]] end)2.glob / ...

  7. 编程四剑客awk

    awk  'pattern +{action}' file (1)AWK基本语法参数详解 a:单引号 ''是为了和shell命令区分开: b:大括号{}表示一个命令分组: c:pattern 是一个过 ...

  8. Linux四剑客find/grep/awk/sed

    find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt \; 这条命令表示找当前目录(-m ...

  9. shell编程三大神器之grep

随机推荐

  1. Git----GitHub上传本地文件到git

    1.首先在git上创建一个库,用来保存上传的本地文件 2.通过命令 git init 把这个目录变成git可以管理的仓库 git init 3.将远程git库克隆一份保存到本地 git clone x ...

  2. XSS攻击(出现的原因、预防措施......)

    验证XSS攻击重点不是去查找可输入哪些内容会出现什么样的bug就是测试XSS攻击,重点是了解它出现的原理,为什么会出现XSS攻击,导致一些问题出现?如何防御与解决XSS攻击?以下我将简单介绍以上提出的 ...

  3. 入门级 JAVA反射机制

    1.什么是反射? Java中的反射机制是Java语言的一个很重要的特性,是Java “动态性” 的重要体现.Java反射机制让我们在程序运行状态中,对于任意一个类,都能知道这个类的所有属性和方法:对于 ...

  4. 【JVM虚拟机】(9)-- JVM是如何处理异常的

    [JVM虚拟机](9)-- JVM是如何处理异常的 上篇博客我们简单说过异常信息是存放在属性表集合中的Code属性表里,那么这篇博客就单独讲Code属性表中的exception_table. 在讲之前 ...

  5. 学习CSS3之实心圆

    CSS3是最新版本的CSS,学习后可以更好的用于工作及自己修改自己代码的各种样式. border-radius圆角方法画实心圆.相当于在长方形(正方形)上画半径为边长一半的圆弧. 效果如上图,代码如下 ...

  6. 10 年三线小城 IT 开发的感悟

    一贯都是写技术博客,从来没写过感悟类文章,因为文笔不好.今天看到了大飞的一篇文章,<技术人,请不要封闭自己>,真的感触太深了. 一 先说说我自己,我并非科班出身,大学毕业后一直没找到好的工 ...

  7. C#采用vony.Html.AIO插件批量爬MM网站图片

    一.创建项目 1.创建一个.netframework的控制台项目命名为Crawler 2.安装nuget包搜索名称Ivony.Html.AIO,使用该类库什么方便类似jqury的选择器可以根据类名或者 ...

  8. JavaScript 原型的深入指南

    摘要: 理解prototype. 原文:JavaScript 原型的深入指南 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 不学会怎么处理对象,你在 JavaScript 道路就就走 ...

  9. SAP MM 标准采购组织的分配对于寄售采购订单收货的影响

    SAP MM 标准采购组织的分配对于寄售采购订单收货的影响 PO 4100004022 是一个寄售的采购订单, 采购组织是CSAS, 工厂代码SZSP.采购信息记录也是有的, MIGO试图对该采购订单 ...

  10. 全球第一免费开源ERP Odoo Ubuntu最佳开发环境独家首发分享

    起源 近年来随着国内的互联网经济的快速腾飞,诞生了很多开源软件创造的市场价值以及企业价值神话,特别是对于企业ERP领域,一直以来都是高昂的国内外产品充实,国内的中小成长型企业越来越需要一套好看又能打, ...