sed1line 笔记

这篇是当初看完Chinaunix论坛的帖子“抛砖引玉----翻译加注sed1line”的笔记,最近无聊从Evernote翻出来。本文假设测试文件名为test.txt。

文件空行处理

1. 在文件中的每一行后面添加一个空行。

sed 'G' test.txt

解释: Get命令是将保留空间的内容取出,并添加到当前模式空间的内容之后(添加一行)。当保留空间为空时,效果为往模式空间添加一行空行。

2. 保证文件中的每一行后面都有一行空行。和1不同的是,如果文件中本身包含空行,则合并成一行。

sed '/^$/d;G' test.txt

解释:首先删除空行,再添加一行空行。

3. 删除偶数行

sed 'n;d' test.txt

解释:n的意思读入下一行,并且输出当前行。当n读入下一行之后,用d将其删除。

继续阅读

Bash 获取当前函数名

在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非字符串,其中数组的第一个元素为当前函数的名称。

可能初看有点难以理解,为什么FUNCNAME要是一个数组呢?看看下面的例子,你就明白了。

#!/bin/bash

function test_func()
{
    echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
    another_func
    echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
}

function another_func()
{
    echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
}

echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"
test_func
echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"

执行后的结果为:

Out of function, $FUNCNAME => ()
Current test_func, $FUNCNAME => (test_func main)
Current another_func, $FUNCNAME => (another_func test_func main)
Current test_func, $FUNCNAME => (test_func main)
Out of function, $FUNCNAME => ()

继续阅读

Sed 命令地址匹配问题总结

这个问题来源于ChinaUnix的一篇帖子“sed地址和模式匹配的问题”。

man sed手册说明

Sed默认的命令执行范围是全局的,如果想仅对其中部分行执行命令,可以使用地址限制。在Manual手册中有一节关于地址的描述,摘取部分如下:

Sed commands can be given with no addresses, in which case the command will be executed for all input lines;

Sed默认是全局编辑的,因此如果不明确指定行的话,命令会在所有输入行上执行。

with one address, in which case the command will only be executed for input lines which match that address;

如果指定一个行地址,那么sed命令就限制在那一行执行。

or with two addresses, in which case the command will be executed for all input lines which match the inclusive range of lines starting from the first address and continuing to the second address.

如果给了两个地址,即地址对(或者地址范围),则命令在匹配的这个地址范围内执行。但是需要注意的几点是:

The syntax is addr1,addr2 (i.e., the addresses are separated by a comma); the line which addr1 matched will always be accepted, even if addr2 selects an earlier line; If addr2 is a regexp, it will not be tested against the line that addr1 matched.

继续阅读

什么是交互式登录 Shell

今天在看~/.bashrc文件的时候看到一行,对它的意思不是非常了解:

[[ $- != *i* ]] && return

就特意上Google搜索了一下,对于搜索关键字是符号(这里是$-)的,我是不怎么抱希望的。所以干脆将$-的结果(himBh)放到Google一起搜索。果然找到两篇不错的帖子:

这两个帖子都是在ChinaUnix论坛上的。这些老论坛虽然人气不行,但是一些资源还是很赞的,这些总结帖都非常好。尤其是第一篇非常值得一读,我只是看了其中一部分。对sh和bash的区别并没有仔细看,觉得这些没必要去死记,到时候碰到问题再去理解就好,要不然就太枯燥了。

Linux用了这么多年,Shell一直在用,执行命令,安装软件,配置文件,以及编写脚本,但是说真地,我对Shell一直不是非常了解,几乎没看过和它相关的任务手册和文档。一般系统中最常见的Shell还是Bash。Bash的手册非常长,我是坚决不看的,头痛。后果就是对Bash的一些现象一知半解,其实这些基本上在手册上都是有写的。

继续阅读

MySQL Python 教程(二)

原文链接:http://zetcode.com/databases/mysqlpythontutorial/
翻译作者:kodango dangoakachan at foxmail dot com
译文链接:
a. https://kodango.com/mysql-python-tutorial-part-one
b. https://kodango.com/mysql-python-tutorial-part-two

译者注:本文的前半部分请看上一篇文章

字典游标

在 MySQLdb 模块中有许多种游标类型。默认的游标类型以元组的元组形式返回数据。当我们使用字典游标时,这些数据是以Python字典的形式返回。这样一来,我们就可以通过列名来访问数据。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb as mdb
import sys

con = mdb.connect('localhost', 'testuser', 
    'test623', 'testdb')

with con:

    cur = con.cursor(mdb.cursors.DictCursor)
    cur.execute("SELECT * FROM Writers")

    rows = cur.fetchall()

    for row in rows:
        print "%s %s" % (row["Id"], row["Name"])

继续阅读

MySQL Python 教程(一)

原文链接:http://zetcode.com/databases/mysqlpythontutorial/
翻译作者:kodango dangoakachan at foxmail dot com
译文链接:
a. https://kodango.com/mysql-python-tutorial-part-one
b. https://kodango.com/mysql-python-tutorial-part-two

关于本教程

这是一份介绍用Python语言操作MySQL数据库的教程,覆盖了基础的Python MySQL编程内容。本教程中使用了MySQLdb模块,文中的例子在Ubuntu系统下运行和测试。

译者注:我使用ArchLinux,会在文中添加与ArchLinux相关的内容,例子也会一一在ArchLinux下验证。

在本站中,有许多与本文类似的教程,其中包括PostgreSQL PythonMySQL Visual BasicMySQL PHP。如果你需要更新与Python语言相关的知识,在这里还有一份完整的Python教程。你也可以考虑阅读MySQL教程

关于MySQL数据库

MySQL是一个领先的开源数据库管理系统。它是一个多用户,多线程的数据库管理系统。MySQL在网上非常流行,它与Linux、Apache、PHP一起组成LAMP平台,这是一个非常流行的Web平台。目前,MySQL是由甲骨文拥有。MySQL数据库可用于最重要的几个操作系统上。它能够运行在BSD UNIX,Linux,Windows或Mac操作系统之上。

继续阅读

MySQL 笔记

这篇笔记,主要是为了记录 MySQL 一些有用的SQL语句和命令。以前在学校里,接触数据库不多,以至于在面试的时候总是被问得非常难堪。现在在公司里,突然发现好多东西是需要学的。

1. 列出所有的表

show tables;

2. 查询表结构

describe table_name;
show columns from table_name;
show create table table_name;

3. 查询表中的第几行

select * from table_name limit n;   查询前n行
select * from table_name limit n-1, m-n; 查询从第n行开始的m行的记录

4. 设置数据库编码

set names utf8;

继续阅读

ArchLinux 安装笔记

更新:10.06版本的ArchLinux安装见ArchLinux 10.06安装

ArchLinux已经使用了将近一年了,不过中间找工作、写论文,已经有一段时间没有使用Linux操作系统了。最近因为公司发了一台本本作为办公使用,计划拿到手后安装一个ArchLinux操作系统。对于ArchLinux这个系统,我自己是非常喜欢的,小巧简单,文档丰富(Linux发行版的文档其实都相当丰富),社区完善,一般的问题通过Google搜索都可以找到答案。这篇文章主要,是为了接下来的安装过程做一个笔记,包括系统的配置、软件的安装以及问题的解决之类的。

安装步骤

1. 下载安装镜像

推荐从网易的开源镜像站下载:下载地址

继续阅读